[英]Toggle Checkbox with jQuery on parent click
我有以下代码示例: http : //jsfiddle.net/sX3w9/
$('.item').on('click', function() {
var checkbox = $(this).find('input');
checkbox.attr("checked", !checkbox.attr("checked"));
$(this).toggleClass('selected');
});
用户应该能够单击div.item
和/或其中的复选框,它应该选中或取消选中该复选框,并从div中添加或删除所选的类。
它在单击div时有效,但单击该复选框会立即再次取消选中它...
请尝试以下代码:
$('.item').on('click', function() {
var checkbox = $(this).find('input');
checkbox.attr("checked", !checkbox.attr("checked"));
$(this).toggleClass('selected');
});
$(".item input").on("click", function(e){
e.stopPropagation();
$(this).parents(".item").toggleClass('selected');
});
问题是,当您选中复选框时,单击div会发生并且它会再次取消选中checbox。
您需要做的就是检查点击的事件目标,如果是复选框,请不要手动更改已checked
属性:
$(function () {
$(".item").on("click", function (e) {
if (!$(e.target).is(':checkbox')) {
var $checkbox = $(this).find("input[type='checkbox']");
$checkbox.click();
}
$(this).toggleClass('selected');
});
}
注意:你可以使用$checkbox.prop("checked", !objCheckbox.prop("checked"));
切换复选框,但如果您有只触发复选框的事件, $checkbox.click();
效果最好。
那是因为你的复选框在div里面......它正在取其父div的事件.eventBubble()。 检查被点击的元素是否是目标元素..如果是的话做你想要的东西...
尝试这个
$('.item').on('click', function(e) {
if(e.target==this){
var checkbox = $(this).find('input');
checkbox.prop("checked", !checkbox.prop("checked"));
$(this).toggleClass('selected');
}else{
$(this).toggleClass('selected');
}
});
这适用于标签:
<label for="checkboxid">
<div class="item">
<input type="checkbox" id="checkboxid" />
</div>
</label>
$('#checkboxid').on('change', function() {
$('.item').toggleClass('selected');
});
这是我用过的:
$('body').on('click', '.item', function (event) {
if (event.target.tagName.toLowerCase() == 'input') return;
var objCheckbox = $(this).find("input[type=checkbox]");
if (objCheckbox.length >= 1) {
objCheckbox.prop("checked", !objCheckbox.prop("checked"));
}
});
$('body').on('click', 'input[type=checkbox]', function (e) {
$(this).parent().click();
$(this).prop("checked", !$(this).prop("checked"));
});
如果页面上有其他复选框,请不要绑定到body
。
单击复选框时会触发该事件两次。 您需要停止绑定在复选框上的事件,并将事件绑定在父元素上,就像这样。
$('.item').on('click', function() {
var checkbox = $(this).find('input');
checkbox.click(function(e){
e.stopPropagation();
}).attr("checked", !checkbox.attr("checked"));
$(this).toggleClass('selected');
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.