我有一个搜索过滤器需要修改。应该发生的情况是,当您单击过滤器(复选框和单选按钮)时,相应标签的克隆将在标题部分中输出。然后,当再次单击复选框或单选按钮时,标签应该消失。克隆标签也是如此。删除此复选框后,该复选框的属性应更改为未选中。
两个并发症。 1) 任何解决方案都必须使用 jQuery 1.7 2) 页面上使用 AJAX。为了解决奇怪的问题(例如,在初始打开后立即再次触发 SlideToggle),我使用 .one()
但这会导致克隆仅创建一次。
所以我有两个问题。单击克隆时如何删除复选框上选中的属性,反之亦然
<强> EXAMPLE of below code in action
$("section label").one("click", function() {
var clonedContent = $(this)
.first()
.clone()
.children()
.end()
.addClass("clone");
$("header").append(clonedContent).addClass("clone");
});
$("header").on("click", ".clone", function() {
var forAttr = $(this).attr("for");
console.log(forAttr);
// $(this).parents(".wrap").find(forAttr).removeClass("is-checked").siblings('input').prop('checked',false);
$(this)
.remove()
.parents(".wrap")
.find("section label")
.removeClass("is-checked");
});
$("section label").click(function() {
$(this).toggleClass("is-checked");
});
最佳答案
当您使用
label for="one"
时,相应的input
应具有id="one"
。否则标签将不会按预期更改输入的状态。您最好跟踪输入的选中状态而不是点击。所以js就很简单了。
请将您的 html 和 js 替换为以下内容:
<div class="wrap">
<header></header>
<form>
<div class="label-wrap"><label for="one">Checkbox 1</label><input id="one" type="checkbox" /></div>
<div class="label-wrap"><label for="two">Checkbox 2</label><input id="two" type="checkbox" /></div>
<div class="label-wrap"><label for="three">Checkbox 3</label><input id="three" type="checkbox" /></div>
<p>note that <input> will be hidden eventually and replaced with a toggled :before</p>
</form>
</div>
$('input').on('change', function() {
var self = $(this);
if(self.is(':checked')) {
self.prev('label').clone().addClass("clone")
.appendTo("header");
self.prev('label').addClass("is-checked");
} else {
$('header label[for="' + self.attr('id') + '"]').replaceWith('');
self.prev('label').removeClass("is-checked");
}
});
关于jquery - 如何单击克隆标签并将复选框选中属性更改为 false & 单击复选框并删除克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44338447/