复选框检查验证

时间:2011-09-27 02:54:43

标签: javascript jquery events

HTML:

<div>
    <input>
    <label>
</div>

JS:

$('div input').live('click',function(){
    alert($(this).is(':checked'));
});
$('div').live('click,'function(e){
    if(!$(e.target).is('input'))
        $(this).find('input').click();
});

每当我点击输入时,它会准确显示输入变为什么(如果我打开输入它会发出警告) 但每当我点击div / label时,它就会相反(当输入打开时它会提示错误)

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

[我假设发生这种情况的原因是因为一个是由jquery之前发生的浏览器触发的(即使我假设jquery应该首先发生,但无论如何),而在另一种情况下,jquery在触发器之前运行'检查',但似乎无法弄清楚如何在脚本之后延迟触发,或强制它在脚本之前运行。]

提前谢谢!

2 个答案:

答案 0 :(得分:2)

您可以在复选框上监控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();
    }
});

此外,如果您的目的是避免整个<label for="" />烦恼,请查看此内容。

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

答案 1 :(得分:1)

试试这个:

$('div input').live('click',function(){
    alert($(this).is(':checked'));
});
$('div').live('click,'function(e){
    if(!$(e.target).is('input'))
        $(this).find('input').triggerHandler("click");
});