javascript - 在点击事件中分配点击事件处理程序

标签 javascript jquery

我在处理 jQuery 中的点击事件时遇到了一些奇怪的行为。

看看this Fiddle

$('#button').click(function() {
    $(document).one('click', function() {
        alert('clicked');
    });
});

此代码将点击事件处理程序绑定(bind)到某个按钮。单击此链接时,应向文档添加一个事件处理程序,在下次单击该文档时提醒“已单击”。

但是当点击这个按钮时,“clicked”会立即得到提醒而无需再次点击。因此,显然将新处理程序绑定(bind)到文档的点击事件冒泡到文档并立即运行刚刚分配的 hndler。

这种行为似乎非常违反直觉。我的意图是在单击按钮时显示一个元素,并在单击该元素外部时再次隐藏它。

$('#button').click(function() {
    // Show some element

    $(document).one('click', function() {
        // Hide the element again
    });
});

但这会导致元素立即被隐藏。

有没有人能解决这个问题?

最佳答案

可以阻止事件向上传播 DOM。

$('#button').click(function(e) {
    e.stopPropagation();
    $(document).one('click', function(e) {
        alert('clicked');
    });
});

JS fiddle : http://jsfiddle.net/7ymJX/6/

关于javascript - 在点击事件中分配点击事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18736271/

相关文章:

javascript - 使用 blob 的 url 和 node.js 中的 sas token 下载 blob

javascript - 删除具有带有另一个函数参数的回调函数的事件监听器

javascript - JavaScript Alert() 函数中的单引号转义

javascript - 使用基于 html id 的 JavaScript 循环

javascript - jQuery UI 可排序连接列表 css 问题

jquery - 如何在悬停时使用 calc 旋转图像 CSS/Jquery

javascript - 如何在拖放中使用 jquery 删除 css 属性

javascript - 带有数据更新的 Angular 应用程序中的 Chrome 中的 SVG 闪烁

javascript - 澄清 jQuery DOM 遍历

javascript - 使用 Mithril 在运行时创建新元素