嵌套点击处理程序有什么不好吗?

5 javascript jquery onclick

有人向我提到过这一点,但我从未找到任何文件来支持这一说法。在应用程序中嵌套单击处理程序是否不好?例如:

$("div").on("click", function(){
    //*Do things*
    $("p").on("click", function(){
        //*Do things*
    })
})
Run Code Online (Sandbox Code Playgroud)

如果这是不好的做法,为什么,以及什么是更好的解决方案?

ade*_*neo 6

是的,这通常很糟糕,除非这正是您想要的?

如果有人点击一个 div 两次,该段落的事件处理程序会被附加两次,执行“事情”两次,尝试一下

$('div').on('click', function() {
  $('p').on('click', function() {
    alert('This is annoyning');
  });
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>click me a few times ?</div>
<br /><br /><br />
<p>... then click me</p>
Run Code Online (Sandbox Code Playgroud)


更好的解决方案是不嵌套事件处理程序

var isClicked = false;

$('div').on('click', function() {
    isClicked = true;
});

$('p').on('click', function() {
    if (isClicked) // do stuff
});
Run Code Online (Sandbox Code Playgroud)

(简化显示概念,不要使用全局变量,jQuery有data()