如果在 bootstrap 4 形式中使用 JQuery 取消选中复选框,则删除克隆的元素
removing cloned element if a checkbox is unchecked with JQuery in a bootstrap 4 form
因此,我正在使用 Bootstrap 4 和 jQuery 构建此原型。我正在使用它的一些内置 类。我在模态中有一堆复选框,单击时必须将其添加到模态之外的下拉列表中。这是复选框在 html:
中的样子
<div class="form-group checkbox">
<label>
<input id="cbitem_Premium_Rate" type="checkbox" class="enableInput" onclick="pass2Dropdownlist(this.id);">
<span class="cb"><i class="cb-icon fa fa-check"></i></span>
<span class="cb-text">Premium %</span>
</label>
<errormsg></errormsn>
</div>
为了将选中的项目添加到下拉列表中,我克隆了带有新 ID 的 ID 为“dditem_template”的标签,并将其附加到 div 标签中:
<div class="btn-group" role="group">
<button id="btnGroupDrop1" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
<div id="dd_itemsSelected" class="dropdown-menu" aria-labelledby="btnGroupDrop1">
<a id="dditem_template" class="dropdown-item d-none" href="#">Item Selected</a>
<a id="dditem_null" class="dropdown-item d-none" href="#">No options selected.</a>
</div>
</div>
这是函数 pass2Dropdownlist(this.id) :
function pass2Dropdownlist(id){
var newID = id.replace("cbitem", "dditem");
if($(this).find(':checkbox').prop("checked", true)){
var ddName = id.replace("cbitem", "");
var ddName = ddName.replace("_", "");
ddName = replaceAll(ddName, "_", " ");
var listItem = $("#dditem_template").clone();
listItem.each(function(){
$(this).attr('id', newID);
$(this).text(ddName);
});
$("#dd_itemsSelected").append(listItem);
listItem.removeClass("d-none");
listItem.addClass("addeditem");
$("#dditem_null").addClass("d-none");
}else{
$("#" + newID).remove();
}
}
我的问题是,如果我取消选中复选框,下拉列表中的项目不会被删除...相反,它会被再次添加。就好像永远不会进入 if 语句的 else 部分。为什么?我在 else 语句中遗漏了什么吗?我将非常感谢你的帮助!!
我认为您混淆了 pass2Dropdownlist()
中的 this
。在您的示例中,它绑定到 window
对象而不是 input
元素。
尝试将元素传递给处理程序:
<input id="cbitem_Premium_Rate" type="checkbox" class="enableInput" onclick="pass2Dropdownlist(this);">
function pass2Dropdownlist(element){
var newID = $(element).attr('id').replace("cbitem", "dditem");
if($(element).find(':checkbox').prop("checked", true)){
var ddName = $(element).attr('id').replace("cbitem", "");
var ddName = ddName.replace("_", "");
ddName = replaceAll(ddName, "_", " ");
var listItem = $("#dditem_template").clone();
listItem.each(function(){
$(this).attr('id', newID);
$(this).text(ddName);
});
$("#dd_itemsSelected").append(listItem);
listItem.removeClass("d-none");
listItem.addClass("addeditem");
$("#dditem_null").addClass("d-none");
}else{
$("#" + newID).remove();
}
}
因此,我正在使用 Bootstrap 4 和 jQuery 构建此原型。我正在使用它的一些内置 类。我在模态中有一堆复选框,单击时必须将其添加到模态之外的下拉列表中。这是复选框在 html:
中的样子<div class="form-group checkbox">
<label>
<input id="cbitem_Premium_Rate" type="checkbox" class="enableInput" onclick="pass2Dropdownlist(this.id);">
<span class="cb"><i class="cb-icon fa fa-check"></i></span>
<span class="cb-text">Premium %</span>
</label>
<errormsg></errormsn>
</div>
为了将选中的项目添加到下拉列表中,我克隆了带有新 ID 的 ID 为“dditem_template”的标签,并将其附加到 div 标签中:
<div class="btn-group" role="group">
<button id="btnGroupDrop1" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
<div id="dd_itemsSelected" class="dropdown-menu" aria-labelledby="btnGroupDrop1">
<a id="dditem_template" class="dropdown-item d-none" href="#">Item Selected</a>
<a id="dditem_null" class="dropdown-item d-none" href="#">No options selected.</a>
</div>
</div>
这是函数 pass2Dropdownlist(this.id) :
function pass2Dropdownlist(id){
var newID = id.replace("cbitem", "dditem");
if($(this).find(':checkbox').prop("checked", true)){
var ddName = id.replace("cbitem", "");
var ddName = ddName.replace("_", "");
ddName = replaceAll(ddName, "_", " ");
var listItem = $("#dditem_template").clone();
listItem.each(function(){
$(this).attr('id', newID);
$(this).text(ddName);
});
$("#dd_itemsSelected").append(listItem);
listItem.removeClass("d-none");
listItem.addClass("addeditem");
$("#dditem_null").addClass("d-none");
}else{
$("#" + newID).remove();
}
}
我的问题是,如果我取消选中复选框,下拉列表中的项目不会被删除...相反,它会被再次添加。就好像永远不会进入 if 语句的 else 部分。为什么?我在 else 语句中遗漏了什么吗?我将非常感谢你的帮助!!
我认为您混淆了 pass2Dropdownlist()
中的 this
。在您的示例中,它绑定到 window
对象而不是 input
元素。
尝试将元素传递给处理程序:
<input id="cbitem_Premium_Rate" type="checkbox" class="enableInput" onclick="pass2Dropdownlist(this);">
function pass2Dropdownlist(element){
var newID = $(element).attr('id').replace("cbitem", "dditem");
if($(element).find(':checkbox').prop("checked", true)){
var ddName = $(element).attr('id').replace("cbitem", "");
var ddName = ddName.replace("_", "");
ddName = replaceAll(ddName, "_", " ");
var listItem = $("#dditem_template").clone();
listItem.each(function(){
$(this).attr('id', newID);
$(this).text(ddName);
});
$("#dd_itemsSelected").append(listItem);
listItem.removeClass("d-none");
listItem.addClass("addeditem");
$("#dditem_null").addClass("d-none");
}else{
$("#" + newID).remove();
}
}