javascript - 将点击处理程序绑定(bind)到除特定 HTML 标记之外的所有元素

标签 javascript jquery html

所以我有一个页面设置,可以让您在点击时扩展文本框:

http://hashtag.ly/#NASCAR

它会在单击时向元素添加一个“事件”类,如果您单击另一个文本框,则会将其删除。现在,如果您单击红色背景,我想删除该类(class)。我还想尽快向页面添加元素,因此重要的是此删除仅来自单击红色部分,即 <body>。元素。

所以这是我现在页面上的内容:(注意日志将被删除类替换)

$('*:not(li)').click(function(){
    console.log('foo')
});

问题是它会在你点击的任何地方记录“foo”,甚至直接在 li 的文本框上元素。我怎样才能使这项工作只有在点击背景时才能进行?

谢谢!

最佳答案

您的问题是您在 HTML 堆栈中冒泡。通过将处理程序放在所有 上,即使您单击 LI,事件也会冒泡到它的 UL。同样,$('body') 会导致冒泡问题。

您最好在主堆栈之外创建一个 div 来处理这个问题。想象一下在大部分页面后面有一个绝对定位的 div。

如果您真的想让 除 LI 之外的所有内容 都触发,您的代码需要看起来更像这样:

$('*:not(li)').click(function(){
// do something.
});
$('li').click(function(evt){
// do something else.
    evt.stopPropagation();
});

关于javascript - 将点击处理程序绑定(bind)到除特定 HTML 标记之外的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11219149/

相关文章:

javascript - 使用 Rails 聊天 Web 应用程序 - 发送消息时页面自动滚动

javascript - 需要帮助在 Angular 2 中将变量传递给对话框

php - .php 与 .html - 为什么不总是使用 .php?

javascript - 如何制作一个捕捉到浏览器每一侧的捕捉标题?

javascript - CSS 动画,点击开始和停止无限动画

javascript - Firestore OrderBy 和Where 冲突

javascript - 如何在 Opera 移动浏览器中禁用高亮选择

javascript - XMLHTTPRequest 请求打开天气返回状态 0

javascript - 如何知道一个对象是否是使用javascript的Html文档

javascript - 禁用 Twitter Bootstrap 按钮(链接)