问题:我与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?
答案 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();