这是我的HTML
#This will be generated throught loop
<li class="selector">
<a>
<input type="checkbox" value="test" /> test
</a>
</li>
这是我的jquery点击事件
$('.selector').on('click', function() {
if($(this).find('input').is(':checked')){
#uncheck the checkbox
}else{
#check the checkbox
}
});
如果选中,我如何取消选中并检查是否未选中
答案 0 :(得分:1)
尝试
$(document).on('click', '.selector', function (e) {
if (!$(e.target).is('input')) {
$(this).find('input').prop('checked', function () {
return !this.checked;
});
}
});
演示:Fiddle
另一种方式
$(document).on('click', '.selector', function (e) {
$(this).find('input').prop('checked', function () {
return !this.checked;
});
});
$(document).on('click', '.selector input', function (e) {
e.stopPropagation();
});
演示:Fiddle
答案 1 :(得分:0)
试试这个
$('.selector').on('click', function() {
var checkbox = $(this).find(':checkbox');
if($(checkbox).is(':checked')){
$(checkbox).prop('checked', false);
}else{
#check the checkbox
$(checkbox).prop('checked', true);
}
});
答案 2 :(得分:0)
我不明白你为什么试图用JavaScript做这件事。如果用户直接单击该复选框,它将自动检查/取消选中自己,但如果您添加代码以在JS中检查/取消选中它将取消默认行为,因此在您的点击处理程序中,您需要测试点击是.selector
内的其他地方。
Anwyay,.prop()
method让你满意:
$('.selector').on('click', function(e) {
if (e.target.type === "checkbox") return; // do nothing if checkbox clicked directly
$(this).find("input[type=checkbox]").prop("checked", function(i,v) {
return !v; // set to opposite of current value
});
});
演示:http://jsfiddle.net/N4crP/1/
但是,如果您的目标只是允许点击文本“test”以点击框,则不需要JavaScript,因为这是<label>
元素的作用:
<li class="selector">
<label>
<input type="checkbox" value="test" /> test
</label>
</li>
正如您在此演示中所看到的:http://jsfiddle.net/N4crP/2/ - 点击文本“test”或复选框将切换当前值,而不使用任何JavaScript。