Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单击父项时的jQuery切换复选框_Jquery_Html_Checkbox_Toggle_Prop - Fatal编程技术网

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

单击父项时的jQuery切换复选框,jquery,html,checkbox,toggle,prop,Jquery,Html,Checkbox,Toggle,Prop,我已经编写了一个简单的js函数来切换复选框的开/关,然后在本例中单击父项TD。当您单击TD上的任意位置时,此功能将按预期工作 但是,当您单击复选框本身时,什么也不会发生。 我想知道的是为什么它会这样做,最好的解决方法是什么 下面是我的js函数: $("td.onoff").click(function() { var objCheckbox = $(this).find("input[type=checkbox]"); if( objCheckbox.length >= 1

我已经编写了一个简单的js函数来切换复选框的开/关,然后在本例中单击父项TD。当您单击TD上的任意位置时,此功能将按预期工作

但是,当您单击复选框本身时,什么也不会发生。 我想知道的是为什么它会这样做,最好的解决方法是什么

下面是我的js函数:

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

谢谢。

检查单击元素的类型。否则,您将试图获取一个不存在的元素

$(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"));
            }
        }
    });
});​   

检查单击的元素的类型。否则,您将试图获取一个不存在的元素

$(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"));
            }
        }
    });
});​   
当事件源不是带有onoff类的td时,您需要旁路事件代码,您可以这样做

当事件源不是带有onoff类的td时,您需要旁路事件代码,您可以这样做


它以这种方式运行的原因是,输入正在触发父单击事件,此时将成为复选框,而不是单击的td,因此。findinput[type=checkbox]不会选择任何内容,因此不会执行任何操作

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

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

它以这种方式运行的原因是,输入触发父单击事件,此时将成为复选框,而不是单击的td,因此。findinput[type=checkbox]不会选择任何内容,因此不会执行任何操作

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

$("td.onoff > input").click(function(e) {
  e.stopPropagation();        
});
添加以下内容:

$("td.onoff :checkbox").click(function(event) {
    event.stopPropagation();
});
这可以防止单击复选框时单击事件冒泡到容器中。

添加以下内容:

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

这可以防止单击复选框时单击事件冒泡到容器中。

使用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>

用于属性而不是任何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>

谢谢你的解释,还有很好的解决方案+1。虽然决定使用@Adil的解决方案,但只在一行中完成了这项工作,在本例中,我可以更轻松地使用他的解决方案管理我的js文件。感谢您的解释,这也是一个不错的解决方案+1。虽然决定使用@Adil的解决方案,但只做了一行,在这个例子中,我更容易用他的解决方案管理我的js文件。很好的替代js,不幸的是,这个项目将需要动态生成大量不同大小的表。在td上添加一个类比添加额外的标记和代码来处理唯一标识符更容易。很好地替代了js,不幸的是,这个项目将需要动态生成大量不同大小的表。在td上添加类比添加额外的标记和代码来处理唯一标识符更容易。