单击父级时的jQuery切换复选框

时间:2012-11-21 09:01:39

标签: jquery html checkbox toggle prop

我编写了一个简单的js函数来打开/关闭复选框,然后单击父级(在本例中为TD)。单击TD 上的任何位置时,此函数按预期工作。

但是当你点击复选框本身时,没有任何反应 我想知道的是为什么它会做到这一点以及最好的解决方法是什么?

I have a provided a jsfiddle to demo this.

这是我的js函数:

$("td.onoff").click(function() {
    var objCheckbox = $(this).find("input[type=checkbox]");
    if( objCheckbox.length >= 1 ) {
        objCheckbox.prop("checked", !objCheckbox.prop("checked"));
    }
});

感谢。

5 个答案:

答案 0 :(得分:5)

你需要by pass event code when source of event is not td with class onoff,你可以这样做。

<强> Live Demo

$(function() {
    $("td.onoff").click(function(event) {          
        if(event.target.className != 'onoff') return;
        var objCheckbox = $(this).find("input[type=checkbox]");
        if( objCheckbox.length >= 1 ) {
            objCheckbox.prop("checked", !objCheckbox.prop("checked"));
        }
    });
});

答案 1 :(得分:1)

检查点击元素的类型。如果没有这个,你就会试图得到一个不存在的元素。

$(function() {
    $("td.onoff").click(function() {
        var type = $(this).attr('type');
        if ( type != "checkbox" ) {
            var objCheckbox = $(this).find("input[type=checkbox]");
            if( objCheckbox.length >= 1 ) {
                objCheckbox.prop("checked", !objCheckbox.prop("checked"));
            }
        }
    });
});​   

答案 2 :(得分:1)

它以这种方式表现的原因是因为input触发了父click事件,此时this成为复选框,而不是点击的td ,因此.find("input[type=checkbox]")不会选择任何内容,因此不会执行任何操作。

其他答案的替代方法是将click事件直接绑定到输入,并阻止它传播,例如:

$("td.onoff > input").click(function(e) {
  e.stopPropagation();        
});

Here's a demo

答案 3 :(得分:0)

添加以下内容:

$("td.onoff :checkbox").click(function(event) {
    event.stopPropagation();
});

当您单击复选框时,这可以防止点击事件冒泡到容器。

答案 4 :(得分:0)

使用“for”属性而不是任何javascript函数 这将自动按功能执行: 就在html下面:

<tr class="row" >
        <td class="onoff" ><label for="check1"><input id="check1" type="checkbox" name="something[]" checked="checked" /></label></td>
    </tr>
    <tr class="row">
        <td class="onoff"><label for="check2"><input id="check2" type="checkbox" name="something[]" checked="checked" /></td>
    </tr>
    <tr class="row">
        <td class="onoff"><label for="check3"><input id="check3" type="checkbox" name="something[]" checked="checked" /></td>
 </tr>