繁体   English   中英

如何在Jquery中停用嵌套的匿名函数

[英]How to deactivate a nested anonymous function in Jquery

我有以下代码:

$('#button-a').click(function(){   
    $('#button-b').click(function(){
        alert('something');
    });
});
$('#button-b').click(function(){   
    // do something
});

单击#button-a后,如何才能停用嵌套的#button-b函数,所以当我单击#button-b时,只有最后一个#button-b函数(未嵌套)被激活,而不是同时激活这两个函数?

使用.on().on() .off()事件处理程序尝试此操作。

$('#button-a').click(function(){   
    $('#button-b').off('click');   //unbind the click event of the #button-b
    $('#button-b').click(function(){
        alert('something');
    });
});
$('#button-b').on('click',function(){   
    // do something
});

为了做到这一点,您的功能不能是匿名的。 您需要使用off形式,该形式指定要删除的处理程序。 稍微重写一下代码,看起来像这样:

function myFunc() {
    alert('something');
}

$("#button-a").click(function() {
    $("#button-b").click(myFunc);
});

$("#button-b").click(function() {
    // do something
});

要删除处理程序,您可以使用:

$("#button-b").off('click', myFunc);

我不太确定您希望在哪里进行此操作,但是以上代码行将在DOM已加载且myFunc在范围内的任何地方工作。

如果您确实在这里需要匿名处理程序,则可以为您的任务使用事件名称空间-http: //api.jquery.com/on/

$('#button-b').on('click.nestedClick', function(){
        alert('something');
    });
    // and unbind it at some point:
    $('#button-b').off('click.nestedClick');

$('#button-a').click(function(){   
    $('#button-b').trigger('click');
});
$('#button-b').click(function(){   
    // do something
});

像这样更改代码,以便在您单击按钮-a时调用按钮-b的最后一个函数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM