gpt4 book ai didi

javascript - jQuery - 无法克隆表单内的嵌套行

转载 作者:行者123 更新时间:2023-12-01 08:33:15 26 4
gpt4 key购买 nike

类似于this问题,我有一个表格并想使用 clone()remove()动态更改用户可见的字段。用户有两个控件:+-分别添加或删除行。

但是,我的问题略有不同,因为我希望为表单内的每个嵌套行启用克隆,并且彼此独立。其用法是允许用户指定一个或多个时间间隔(例如每天 9AM5PM)。换句话说,用户应该能够添加任意数量的时间间隔,但单击 +-星期一下只会影响 Monday 内的字段行- 不影响其他日子。

屏幕截图

  1. Form - Initial State
  2. Form - How it Should Look (when a user adds a row under each day)

我可以通过点击 + 来获取它。或-复制整行(包括复选框) - 这不是我想要的: https://jsfiddle.net/9jpraney/

我知道FromTo字段需要位于父级 div 内和这位家长div是应该被克隆的那个。但是,当我进行此更改时,它根本不会克隆。

这是我的最新尝试: https://jsfiddle.net/znxj5Lrs/

var regex = /^(.+?)(\d+)$/i;
var cloneIndex = $(".time-interval").length;

function clone(){
$(this).parents(".time-interval").clone()
.appendTo("body")
.attr("id", "time-interval" + cloneIndex)
.find("*")
.each(function() {
var id = this.id || "";
var match = id.match(regex) || [];
if (match.length == 3) {
this.id = match[1] + (cloneIndex);
}
})
.on('click', '.add-interval', clone)
.on('click', '.remove-interval', remove);
cloneIndex++;
}
function remove(){
$(this).parents(".time-interval").remove();
}
$(".add-interval").on("click", clone);

$(".remove-interval").on("click", remove);
.row {
background: #f8f9fa;
margin-top: 20px;
}

.col {
border: solid 1px #6c757d;
padding: 10px;
}

.btn-alt-success {
color: #5c852c;
background-color: #ebf5df;
border-color: #ebf5df;
}

.btn-alt-danger {
color: #af1310;
background-color: #fae9e8;
border-color: #fae9e8;
}

.actions > a {
cursor: pointer;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="form-group row">
<label class="col-3">Days <span class="text-danger">*</span></label>
<label class="col-9">Times</label>
</div>
<div class="form-group row">
<!--<label class="col-lg-2 col-form-label mt-10">Step</label>-->

<div class="col-lg-3">
<div class="custom-control custom-checkbox mb-20">
<input class="custom-control-input" type="checkbox" id="monday" name="days[]" value="monday">
<label class="custom-control-label" for="monday">Monday</label>
</div>
</div>
<div class="col-lg-5">
<div class="row time-interval">
<div class="col-lg-5">
<select class="form-control form-control-lg" name="from_hours[monday][]">

<option value="0">12 AM</option>

<option value="1"> 1 AM</option>

<option value="2"> 2 AM</option>

<option value="3"> 3 AM</option>

<option value="4"> 4 AM</option>

<option value="5"> 5 AM</option>

<option value="6"> 6 AM</option>

<option value="7"> 7 AM</option>

<option value="8"> 8 AM</option>

<option value="9" selected> 9 AM</option>

<option value="10">10 AM</option>

<option value="11">11 AM</option>

<option value="12">12 PM</option>

<option value="13"> 1 PM</option>

<option value="14"> 2 PM</option>

<option value="15"> 3 PM</option>

<option value="16"> 4 PM</option>

<option value="17"> 5 PM</option>

<option value="18"> 6 PM</option>

<option value="19"> 7 PM</option>

<option value="20"> 8 PM</option>

<option value="21"> 9 PM</option>

<option value="22">10 PM</option>

<option value="23">11 PM</option>

</select>
</div>
<div class="col-lg-2">
<span class="pl-15">to</span>
</div>
<div class="col-lg-5">
<select class="form-control form-control-lg mb-30" name="to_hours[monday][]">

<option value="0">12 AM</option>

<option value="1"> 1 AM</option>

<option value="2"> 2 AM</option>

<option value="3"> 3 AM</option>

<option value="4"> 4 AM</option>

<option value="5"> 5 AM</option>

<option value="6"> 6 AM</option>

<option value="7"> 7 AM</option>

<option value="8"> 8 AM</option>

<option value="9"> 9 AM</option>

<option value="10">10 AM</option>

<option value="11">11 AM</option>

<option value="12">12 PM</option>

<option value="13"> 1 PM</option>

<option value="14"> 2 PM</option>

<option value="15"> 3 PM</option>

<option value="16"> 4 PM</option>

<option value="17" selected> 5 PM</option>

<option value="18"> 6 PM</option>

<option value="19"> 7 PM</option>

<option value="20"> 8 PM</option>

<option value="21"> 9 PM</option>

<option value="22">10 PM</option>

<option value="23">11 PM</option>

</select>
</div>
</div>
</div>
<div class="col-lg-4 actions">
<a class="btn btn-alt-success add-interval">+</a>
<a class="btn btn-alt-danger remove-interval">-</a>
</div>

<div class="col-lg-3">
<div class="custom-control custom-checkbox mb-20">
<input class="custom-control-input" type="checkbox" id="tuesday" name="days[]" value="tuesday">
<label class="custom-control-label" for="tuesday">Tuesday</label>
</div>
</div>
<div class="col-lg-5">
<div class="row time-interval">
<div class="col-lg-5">
<select class="form-control form-control-lg" name="from_hours[tuesday][]">

<option value="0">12 AM</option>

<option value="1"> 1 AM</option>

<option value="2"> 2 AM</option>

<option value="3"> 3 AM</option>

<option value="4"> 4 AM</option>

<option value="5"> 5 AM</option>

<option value="6"> 6 AM</option>

<option value="7"> 7 AM</option>

<option value="8"> 8 AM</option>

<option value="9" selected> 9 AM</option>

<option value="10">10 AM</option>

<option value="11">11 AM</option>

<option value="12">12 PM</option>

<option value="13"> 1 PM</option>

<option value="14"> 2 PM</option>

<option value="15"> 3 PM</option>

<option value="16"> 4 PM</option>

<option value="17"> 5 PM</option>

<option value="18"> 6 PM</option>

<option value="19"> 7 PM</option>

<option value="20"> 8 PM</option>

<option value="21"> 9 PM</option>

<option value="22">10 PM</option>

<option value="23">11 PM</option>

</select>
</div>
<div class="col-lg-2">
<span class="pl-15">to</span>
</div>
<div class="col-lg-5">
<select class="form-control form-control-lg mb-30" name="to_hours[tuesday][]">

<option value="0">12 AM</option>

<option value="1"> 1 AM</option>

<option value="2"> 2 AM</option>

<option value="3"> 3 AM</option>

<option value="4"> 4 AM</option>

<option value="5"> 5 AM</option>

<option value="6"> 6 AM</option>

<option value="7"> 7 AM</option>

<option value="8"> 8 AM</option>

<option value="9"> 9 AM</option>

<option value="10">10 AM</option>

<option value="11">11 AM</option>

<option value="12">12 PM</option>

<option value="13"> 1 PM</option>

<option value="14"> 2 PM</option>

<option value="15"> 3 PM</option>

<option value="16"> 4 PM</option>

<option value="17" selected> 5 PM</option>

<option value="18"> 6 PM</option>

<option value="19"> 7 PM</option>

<option value="20"> 8 PM</option>

<option value="21"> 9 PM</option>

<option value="22">10 PM</option>

<option value="23">11 PM</option>

</select>
</div>
</div>
</div>
<div class="col-lg-4 actions">
<a class="btn btn-alt-success add-interval">+</a>
<a class="btn btn-alt-danger remove-interval">-</a>
</div>

<div class="col-lg-3">
<div class="custom-control custom-checkbox mb-20">
<input class="custom-control-input" type="checkbox" id="wednesday" name="days[]" value="wednesday">
<label class="custom-control-label" for="wednesday">Wednesday</label>
</div>
</div>
<div class="col-lg-5">
<div class="row time-interval">
<div class="col-lg-5">
<select class="form-control form-control-lg" name="from_hours[wednesday][]">

<option value="0">12 AM</option>

<option value="1"> 1 AM</option>

<option value="2"> 2 AM</option>

<option value="3"> 3 AM</option>

<option value="4"> 4 AM</option>

<option value="5"> 5 AM</option>

<option value="6"> 6 AM</option>

<option value="7"> 7 AM</option>

<option value="8"> 8 AM</option>

<option value="9" selected> 9 AM</option>

<option value="10">10 AM</option>

<option value="11">11 AM</option>

<option value="12">12 PM</option>

<option value="13"> 1 PM</option>

<option value="14"> 2 PM</option>

<option value="15"> 3 PM</option>

<option value="16"> 4 PM</option>

<option value="17"> 5 PM</option>

<option value="18"> 6 PM</option>

<option value="19"> 7 PM</option>

<option value="20"> 8 PM</option>

<option value="21"> 9 PM</option>

<option value="22">10 PM</option>

<option value="23">11 PM</option>

</select>
</div>
<div class="col-lg-2">
<span class="pl-15">to</span>
</div>
<div class="col-lg-5">
<select class="form-control form-control-lg mb-30" name="to_hours[wednesday][]">

<option value="0">12 AM</option>

<option value="1"> 1 AM</option>

<option value="2"> 2 AM</option>

<option value="3"> 3 AM</option>

<option value="4"> 4 AM</option>

<option value="5"> 5 AM</option>

<option value="6"> 6 AM</option>

<option value="7"> 7 AM</option>

<option value="8"> 8 AM</option>

<option value="9"> 9 AM</option>

<option value="10">10 AM</option>

<option value="11">11 AM</option>

<option value="12">12 PM</option>

<option value="13"> 1 PM</option>

<option value="14"> 2 PM</option>

<option value="15"> 3 PM</option>

<option value="16"> 4 PM</option>

<option value="17" selected> 5 PM</option>

<option value="18"> 6 PM</option>

<option value="19"> 7 PM</option>

<option value="20"> 8 PM</option>

<option value="21"> 9 PM</option>

<option value="22">10 PM</option>

<option value="23">11 PM</option>

</select>
</div>
</div>
</div>
<div class="col-lg-4 actions">
<a class="btn btn-alt-success add-interval">+</a>
<a class="btn btn-alt-danger remove-interval">-</a>
</div>

<div class="col-lg-3">
<div class="custom-control custom-checkbox mb-20">
<input class="custom-control-input" type="checkbox" id="thursday" name="days[]" value="thursday">
<label class="custom-control-label" for="thursday">Thursday</label>
</div>
</div>
<div class="col-lg-5">
<div class="row time-interval">
<div class="col-lg-5">
<select class="form-control form-control-lg" name="from_hours[thursday][]">

<option value="0">12 AM</option>

<option value="1"> 1 AM</option>

<option value="2"> 2 AM</option>

<option value="3"> 3 AM</option>

<option value="4"> 4 AM</option>

<option value="5"> 5 AM</option>

<option value="6"> 6 AM</option>

<option value="7"> 7 AM</option>

<option value="8"> 8 AM</option>

<option value="9" selected> 9 AM</option>

<option value="10">10 AM</option>

<option value="11">11 AM</option>

<option value="12">12 PM</option>

<option value="13"> 1 PM</option>

<option value="14"> 2 PM</option>

<option value="15"> 3 PM</option>

<option value="16"> 4 PM</option>

<option value="17"> 5 PM</option>

<option value="18"> 6 PM</option>

<option value="19"> 7 PM</option>

<option value="20"> 8 PM</option>

<option value="21"> 9 PM</option>

<option value="22">10 PM</option>

<option value="23">11 PM</option>

</select>
</div>
<div class="col-lg-2">
<span class="pl-15">to</span>
</div>
<div class="col-lg-5">
<select class="form-control form-control-lg mb-30" name="to_hours[thursday][]">

<option value="0">12 AM</option>

<option value="1"> 1 AM</option>

<option value="2"> 2 AM</option>

<option value="3"> 3 AM</option>

<option value="4"> 4 AM</option>

<option value="5"> 5 AM</option>

<option value="6"> 6 AM</option>

<option value="7"> 7 AM</option>

<option value="8"> 8 AM</option>

<option value="9"> 9 AM</option>

<option value="10">10 AM</option>

<option value="11">11 AM</option>

<option value="12">12 PM</option>

<option value="13"> 1 PM</option>

<option value="14"> 2 PM</option>

<option value="15"> 3 PM</option>

<option value="16"> 4 PM</option>

<option value="17" selected> 5 PM</option>

<option value="18"> 6 PM</option>

<option value="19"> 7 PM</option>

<option value="20"> 8 PM</option>

<option value="21"> 9 PM</option>

<option value="22">10 PM</option>

<option value="23">11 PM</option>

</select>
</div>
</div>
</div>
<div class="col-lg-4 actions">
<a class="btn btn-alt-success add-interval">+</a>
<a class="btn btn-alt-danger remove-interval">-</a>
</div>



</div>

我完全被困在这里,不知道为什么它适用于整行而不是其中的一部分。我怀疑这与parent()的使用有关。 ,但不确定。非常感谢任何见解!

最佳答案

请参阅此工作代码

https://jsfiddle.net/p9Loj8kc/1 ,

您查找 .time-interval 的方式是错误的。

下面是js中的代码改动

js:

var regex = /^(.+?)(\d+)$/i;
var cloneIndex = $(".time-interval").length;
function clone(){
var $closestTimeInterval = $(this).closest(".actions").siblings(".time-interval").first();
$closestTimeInterval.clone()
.insertAfter($closestTimeInterval).attr("id", "time-interval" + cloneIndex)
.find("*")
.each(function() {
var id = this.id || "";
var match = id.match(regex) || [];
if (match.length == 3) {
this.id = match[1] + (cloneIndex);
}
});
cloneIndex++;
}
function remove(){
$(this).parents(".time-interval").remove();
}
$(".add-interval").on("click", clone);

$(".remove-interval").on("click", remove);

关于javascript - jQuery - 无法克隆表单内的嵌套行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59847290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com