不立即调用eventListener中的代码?

时间:2016-07-27 15:28:55

标签: javascript jquery closures addeventlistener

我正在尝试理解这段代码,但它没有任何意义。 单击rescue_from按钮时,他正在调用调用#open_help的{​​{1}},调用jQuery函数来显示帮助div,但如果您在下面看到他正在添加和删除事件侦听器他还打电话给handleOpen()。他为什么这样做?

他只是这样做来封装hideHelp所以它会等待点击按钮吗?

showHelp()

2 个答案:

答案 0 :(得分:1)

让我们将代码简化为最低限度并重新安排一下,看看发生了什么:

$("#help").show(); // Show the help dialog

// If user clicks ANYWHERE (the whole document)
document.addEventListener("click",function __handler__(evt){
    hideHelp(); // Hide the help dialog

    // Remove myself from the event listener so that this function
    // will not be called again when user clicks anywhere:
    document.removeEventListener("click",__handler__,true);
},true);

所以基本上它抓住任何地方的任何点击事件(按钮,文本,链接,空格......任何地方)并执行一个隐藏帮助对话框的功能。在执行此操作之后(在原始代码之前),它将自己从click事件处理程序中删除,以便页面上的其他内容可以再次获得点击。

答案 1 :(得分:0)

如果您发现隐藏帮助基本上属于" Click"在用户单击帮助后附加到文档元素上的事件侦听器。这意味着一旦显示帮助信息,您只需点击页面上的任意位置,所显示的内容将再次被隐藏。

stoppropigation和stopImmediatePropogation只是保险,没有别的事情会发生接受他想要的东西。它会阻止所有事件处理程序和父事件处理程序。

然后他删除了" Click"触发show事件时添加的事件侦听器。单击帮助后将再次添加。

然后他最后隐藏了帮助元素并等待再次点击帮助。

希望这能回答你的问题。