Javascript 复选框检查验证

Javascript 复选框检查验证,javascript,jquery,events,Javascript,Jquery,Events,HTML: 每当我点击输入时,它都会准确地显示输入变成什么(如果我打开输入,它会提示为真) 但是,每当我单击div/标签时,它都会执行相反的操作(当输入打开时,它会发出错误警报) 是否有办法测试输入是否在两种情况下都打开和关闭,而不是在1中打开和关闭? [我假设发生这种情况的原因是因为浏览器在jquery之前触发了这种情况(尽管我假设jquery应该首先发生,但不管怎样)在另一种情况下,jquery在“checked”的触发器之前运行,但似乎不知道如何将触发器延迟到脚本之后,或者强制它在脚本之前

HTML:

每当我点击输入时,它都会准确地显示输入变成什么(如果我打开输入,它会提示为真)
但是,每当我单击div/标签时,它都会执行相反的操作(当输入打开时,它会发出错误警报)

是否有办法测试输入是否在两种情况下都打开和关闭,而不是在1中打开和关闭?

[我假设发生这种情况的原因是因为浏览器在jquery之前触发了这种情况(尽管我假设jquery应该首先发生,但不管怎样)在另一种情况下,jquery在“checked”的触发器之前运行,但似乎不知道如何将触发器延迟到脚本之后,或者强制它在脚本之前运行。]


提前谢谢

您可以监视复选框本身的
change()
,然后在DIV上单击,您可以直接更改复选框中的值,然后触发
change()
,而不是
click()

此外,如果您的目的是避免整个
烦恼,请查看此项

$('input[type="checkbox"]').live('change',function(){
    alert($(this).is(':checked'));
});

$('div').live('click',function(e){
    if(!$(e.target).is('input')) {
        var $input = $(this).find('input');
        $input.prop("checked", !$input.is(':checked')).change();
    }
});
检查一下

您可以监视复选框本身的
change()
,然后在DIV上单击可以直接更改复选框中的值,然后触发
change()
而不是
单击()

此外,如果您的目的是避免整个
烦恼,请查看此项

$('input[type="checkbox"]').live('change',function(){
    alert($(this).is(':checked'));
});

$('div').live('click',function(e){
    if(!$(e.target).is('input')) {
        var $input = $(this).find('input');
        $input.prop("checked", !$input.is(':checked')).change();
    }
});
检查一下
试试这个:

<label><input type="checkbox" value="awesome" /> Check it</label>
试试这个:

<label><input type="checkbox" value="awesome" /> Check it</label>

你想在这里实现什么?如果您打算点击标签,请选中或取消选中复选框,如果您有
,则会自动选中该复选框,您在这里想要实现什么?如果您想点击标签,请选中或取消选中复选框,如果您有
jQuery,该复选框将自动出现。triggerHandler()
不会与
jQuery.live()
一起工作,因为live会观察文档上的事件,而不是相关元素和
triggerHandler()
不会导致起泡。在触发处理程序之前,您还必须扩展您的答案以执行对复选框的更新,因为您跳过的是浏览器的默认行为,而更新复选框值的是浏览器。我刚刚尝试了这一点,正如Mike所说,很遗憾,它不起作用。
jQuery.triggerHandler()
无法与
jQuery.live()
配合使用,因为live观察文档上的事件,而不是相关元素,并且
triggerHandler()
不会导致冒泡。在触发处理程序之前,您还必须扩展您的答案以执行对复选框的更新,因为您跳过的是浏览器的默认行为,而更新复选框值的是浏览器。我刚刚尝试了这个,正如Mike所说,不幸的是,它不起作用。这最终会起作用(ish)。我不得不将它从.prop改为.attr,因为我的jquery版本不支持.prop方法。使用“更改”而不是“单击”是个好主意。这最终会起作用(ish)。我不得不将它从.prop改为.attr,因为我的jquery版本不支持.prop方法。使用“更改”而不是“单击”的好主意。
$('div input').live('click',function(){
    alert($(this).is(':checked'));
});
$('div').live('click,'function(e){
    if(!$(e.target).is('input'))
        $(this).find('input').triggerHandler("click");
});