javascript - 在 jQuery 事件处理程序中检查输入[type=checkbox]

标签 javascript jquery jquery-events

我有以下 HTML:

<ul id=list>
    <li>
        <input type=checkbox />
        Item 1
    </li>
    <li>
        <input type=checkbox />
        Item 2
    </li>
    <li>
        <input type=checkbox />
        Item 3
    </li>
</ul>

以及相应的 JavaScript:

$('ul').bind('click', function(e) {

    if (e.srcElement.tagName.toLowerCase() === 'input') {
        e.srcElement.checked = true;
    }

    return false;
});
    
$('body').bind('click', function() {

    alert('you should see this alert if and only if you did NOT click the list');

})

当我单击复选框时,它不会被选中。我希望当用户单击它时检查它。

如何在用户单击该复选框时选中该复选框,但是 仍然取消 body 点击事件处理程序吗?

我已经发布了JS fiddle也是如此。

编辑:我知道代码有点笨拙,但是应用程序需要以这种方式构建它,因此解决方案应尽可能接近原始代码。话虽这么说,对观察到的行为的解释将不胜感激。

最佳答案

使用e.stopPropagation() [docs]而不是返回 false。后者还可以防止默认操作的发生,即切换复选框的状态。

您还应该考虑将事件处理程序绑定(bind)到 change 事件,而不是 click,鼠标并不是切换复选框的唯一方法。不过,您仍然需要添加一个额外的处理程序来防止 click 事件冒泡。

关于javascript - 在 jQuery 事件处理程序中检查输入[type=checkbox],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7842684/

相关文章:

javascript - 是否有任何解决方案可以显示从弹出窗口到选择字段的选定记录

javascript - 弹出窗口的动态高度取决于内容,可能吗?

javascript - 允许在 JQUERY 类中单击一次

javascript - 检测页面上的Flowplayer并添加事件监听器

javascript - jQuery 抛出 SCRIPT5022 : HierarchyRequestError when attempted to append a jQuery object on Internet Explorer ( IE)

javascript - 如何通过注入(inject)脚本修改/扩展 javascript 函数?

javascript - 我怎样才能得到一个 div 及其所有子项及其各自的 computedStyles?

javascript - 无法限制 JavaScript 中振荡器的持续时间

jquery - 在文本框中显示超赞字体图标

javascript - 使用 JavaScript 显示/隐藏表单的某些部分。如何一次只显示一个部分?