我有一个需要改进的搜索过滤器。应该发生的是,当您单击过滤器(复选框和单选按钮)时,相应标签的克隆将在标题部分中输出。然后,当再次单击复选框或单选按钮时,标签应该消失。克隆标签也是如此。如果删除此复选框,则应将其属性更改为未选中。
两个并发症。 1)任何解决方案必须使用jQuery 1.7 2)在页面上使用AJAX。为了解决奇怪的问题(例如,在初始打开后立即再次触发slideToggle)我正在使用$("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");
});
,但这会导致克隆只创建一次。
所以我有两个问题。单击克隆并使用vise Versa
时,如何删除复选框上的checked属性EXAMPLE of below code in action
{{1}}
答案 0 :(得分:0)
当您使用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");
}
});