Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.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
Javascript 如何忽略td中的复选框_Javascript_Jquery_Event Delegation - Fatal编程技术网

Javascript 如何忽略td中的复选框

Javascript 如何忽略td中的复选框,javascript,jquery,event-delegation,Javascript,Jquery,Event Delegation,我正在使用jQuery的事件委派将单击事件添加到表行中。我在第一行的td中也有一个复选框。当我单击行中的任意位置时,一切都按预期工作。但是,当我单击复选框时,我不希望事件工作。我尝试过使用:not()选择器,但可能我遗漏了一些东西,因为当我单击复选框时仍在触发事件 HTML <tr> <td> <div class="myCheckbox"><input type="checkbox" name="userName" />

我正在使用jQuery的事件委派将单击事件添加到表行中。我在第一行的td中也有一个复选框。当我单击行中的任意位置时,一切都按预期工作。但是,当我单击复选框时,我不希望事件工作。我尝试过使用:not()选择器,但可能我遗漏了一些东西,因为当我单击复选框时仍在触发事件


HTML

<tr>
    <td>
        <div class="myCheckbox"><input type="checkbox" name="userName" /></div>
    </td>
    <td><a href="/go/to/user/profile"></a></td>
    <td>more info</td>
    <td>more info</td>
    <td>more info</td>
</tr>


请帮我修复我试图做的事情好吗?

两个选项(都涉及从现有代码中删除
tr:not
内容,正如您所说,这不起作用-
tr
元素不能是复选框,
:not
检查元素,而不是其内容):

  • 将事件处理程序添加到调用的复选框中。然后单击事件将不会到达该行。您可以直接或通过授权来实现这一点。直达。如果您选择间接方式,请确保在您想要支持的所有浏览器上测试单击激活复选框的
    标签
    s

  • 将此添加到处理程序:

    if ($(event.target).is('input[type=checkbox]')) {
        return;
    }
    
    例如:

    这是通过测试事件的来源来实现的,看看它是否是一个复选框,然后尽早退出

  • 在这两种情况下,如果使用
    标签
    激活复选框,则可能需要对标签执行相同的操作

    我对#2处理
    label
    s会是什么样子感到好奇,结果证明它足够让代码移动到函数中,但不难&mdash我可能会怎么做:|

    两个选项(都涉及从现有代码中删除
    tr:not
    内容,正如您所说,这不起作用-
    tr
    元素不能是复选框,
    :not
    检查元素,而不是其内容):

  • 将事件处理程序添加到调用的复选框中。然后单击事件将不会到达该行。您可以直接或通过授权来实现这一点。直达。如果您选择间接方式,请确保在您想要支持的所有浏览器上测试单击激活复选框的
    标签
    s

  • 将此添加到处理程序:

    if ($(event.target).is('input[type=checkbox]')) {
        return;
    }
    
    例如:

    这是通过测试事件的来源来实现的,看看它是否是一个复选框,然后尽早退出

  • 在这两种情况下,如果使用
    标签
    激活复选框,则可能需要对标签执行相同的操作

    我对#2处理
    label
    s会是什么样子感到好奇,结果证明它足够让代码移动到函数中,但不难&mdash我可能会怎么做:|

    尝试使用stopPropagation()防止事件冒泡

    $('div.myCheckbox input[type=checkbox]').bind('change', function(e) {
      e.stopPropagation();
    
      //do stuff here
    });
    
    尝试使用stopPropagation()防止事件冒泡

    $('div.myCheckbox input[type=checkbox]').bind('change', function(e) {
      e.stopPropagation();
    
      //do stuff here
    });
    

    change
    事件的可能重复与点击表格单元格无关。
    change
    事件与点击表格单元格无关。这太完美了!!非常感谢。这太完美了!!非常感谢你。
    $('div.myCheckbox input[type=checkbox]').bind('change', function(e) {
      e.stopPropagation();
    
      //do stuff here
    });