在Bind而不是Click

时间:2016-03-07 16:33:46

标签: javascript jquery coffeescript

问题:我与click事件绑定的函数在绑定时启动。

我发现其他人遇到同样的问题并找到了几个答案。但是,在实施这些解决方案时,我仍然看到同样的问题。我一定做错了什么,但我似乎无法弄明白。

问题演示: https://jsfiddle.net/b35krwfh/16/

在bind上调用函数的原始代码片段(coffeescript):

$("body").bind "click", deviceCloseView

经过一些在线调查后,我发现以下是推荐的解决方案,但我仍然遇到同样的问题:

$("body").bind "click", ->
  deviceCloseView()

更新:有人建议我删除括号,但这似乎无法解决问题,因为当我这样做时根本没有执行:

$("body").bind "click", ->
  deviceCloseView

https://jsfiddle.net/b35krwfh/15/

我试图解决此问题的一些参考资料:

jQuery function called in a .bind click handler is running on document ready

Why does click event handler fire immediately upon page load?

2 个答案:

答案 0 :(得分:1)

jsfiddle中的deviceOpenView不会停止点击事件的传播。当您将deviceCloseView绑定到body时,它也会被相同的点击触发。

您需要更改deviceOpenView以停止点击事件的传播,以防止这种情况发生。

deviceOpenView = (event) ->
  event.stopPropagation();
  // ... your other code

答案 1 :(得分:1)

您的活动正在冒泡。这是一个固定的小提琴: https://jsfiddle.net/6nk3asfw/

调用preventDefault,stopPropagation,返回false,我只是做了所有这些:)

一些代码:

deviceOpenView = (e) ->
    console.log("open");
    console.dir(e);
    e.preventDefault();
    e.stopPropagation();