jquery - 如果在 bootstrap 4 表单中未使用 JQuery 选中复选框,则删除克隆的元素
问题描述
所以,我正在使用 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 语句中遗漏了什么吗?我将非常感谢您的帮助!
解决方案
我认为你在混淆this
内部pass2Dropdownlist()
。在您的示例中,它绑定到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();
}
}
推荐阅读
- import - 如何使用名称作为字符串导入 python 文件
- google-chrome - Devtools 无法在 Windows 上的 Chrome 版本 84.0.4147.89 (Build official) 中加载 SourceMap
- google-chrome - 如何在 Chrome 中禁用问题通知?
- reactjs - 从 API 获取数据:避免多次调用
- mysql - ubuntu 使用 MySql 运行 Xampp
- java - 遍历 JSON 字符串并获取 Key 和 Value Both
- regex - 查找和替换所有 CSS 样式 Google 表格
- r - r 中的 recodeSNPs 函数不处理输入矩阵中的 NA
- memory - 关于内存以及如何计算结束地址
- python - Django - 使用 form.save() 保存多个对象