Jquery 如何处理这些嵌套事件?

Jquery 如何处理这些嵌套事件?,jquery,Jquery,我对嵌套事件有问题 考虑这是html代码: <button id="first">first button </button> <button id="second">second button </button> $(document).ready(function() { $('#first').click(function() { $('#second').click(function() { alert('tes

我对嵌套事件有问题

考虑这是html代码:

<button id="first">first button </button>

<button id="second">second button </button>
$(document).ready(function() {
$('#first').click(function() {
    $('#second').click(function() {
        alert('test');
    });
});
}))

当第一个按钮被点击n次时。。。然后单击第一个按钮一次。。警报显示n次

我想处理这个问题:

当点击第一个按钮n次时变成。。。然后单击第一个按钮一次。。警报显示一次

但是不使用
one()
方法

就可以做到这一点-

var isBind = false;
$('#first').click(function() {
   if(!isBind){
    $('#second').click(function() {
        alert('test');
    });
    isBind = true;
   }
});
只需使用
off()
解除绑定事件:

$(document).ready(function() {
    $('#first').click(function() {
        $('#second').off('click').click(function() {
            alert('test');
        });
    });
});
使用标志(在线程概念中称为锁)

例如:

$(document).ready(function() {
    var clicked = false;
    $('#first').click(function() {
        clicked = true;
    });
    $('#second').click(function() {
         if(clicked){
            alert('test');
            clicked = false;
         }
    });
});
因为第二个事件仅在
窗口时使用。单击的
为true


我知道,这很难看,但是…它很有效,而且很容易理解。(而且它支持多个事件侦听器,请记住更改对象属性的名称
window

我可以问一下为什么要嵌套click处理程序吗?请注意,您不必在window上定义它,您也可以只做
var clicked=false
,直接在内部使用它,这样就消除了全局冲突的可能性。@KevinB在我的一些测试中出现了与函数上下文和父函数上下文相关的错误。在Python中,我知道这基本上是好的,但在Javascript中,我更喜欢使用一些全局变量来避免识别变量值的问题。@KevinB顺便说一下,我已经根据您的建议修复了代码。