javascript - 连续点击事件

标签 javascript jquery click mouseevent dom-events

我无法理解特殊的 Javascript 事件场景。

有关插图,请参阅 http://jsfiddle.net/UFL7X/

当第一次单击黄色框时,我希望只有第一次单击事件处理程序被调用并且大框变为绿色。但是两个事件处理程序都被调用(大框变成红色),即使在点击发生时第二个处理程序不存在(至少我是这么认为的)。

这怎么解释呢?

最佳答案

所以发生的事情是你的事件在 dom 中冒泡。

  1. 点击发生在 div2
  2. div2调用点击函数
  3. 改变div1的颜色
  4. 它将一个点击事件分配给 div1
  5. div2 点击函数结束(隐含的return true)
  6. 事件冒泡到 DOM 中的父级
  7. div1 接收冒泡点击事件
  8. div1 点击函数被调用

如果您不希望发生这种情况,则需要在 div2 的点击处理程序中返回 false

编辑:请注意,您组织 JS 的方式可能不是最好的,因为如果我点击 div2 100 次,这意味着 div1 现在有 100 个点击事件它将运行。

我建议你这样做(记住我不知道你的要求是什么):

$("#div2").click(function() {
    $("#div1").css("background-color", "green");
    return false;
});

$("#div1").click(function() {
    $("#div1").css("background-color", "red");
});

关于javascript - 连续点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4812801/

相关文章:

javascript - 尝试从集合中获取特定模型

javascript - 提交表单后用户重定向到自定义链接

javascript - parent.parent.window.location.href 不工作

javascript - 单击时无法调用函数

jQuery:在所有点击事件发生之前捕获它们?

javascript - 如何更改对话框窗口的确定/取消按钮的标签?

javascript - 为什么 $(this) 选择器在我的函数内部工作,但在外部工作?

javascript - 使用 jquery 突出显示搜索文本

javascript - 如何在所有元素上仅触发一次toggle()?

javascript - jQuery 的两个 onclick 操作的变量