0

我有以下代码:

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

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

4

4 回答 4

1

尝试使用.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
});
于 2013-07-31T16:31:42.293 回答
0

为了实现这一点,您的函数不能是匿名的。您需要使用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在范围内的任何地方工作。

于 2013-07-31T16:30:40.327 回答
0

如果您觉得这里肯定需要一个匿名处理程序,您可以为您的任务使用事件命名空间 - http://api.jquery.com/on/

    $('#button-b').on('click.nestedClick', function(){
        警报(“某事”);
    });
    // 并在某个时候解除绑定:
    $('#button-b').off('click.nestedClick');
    

于 2013-07-31T16:40:15.983 回答
0
$('#button-a').click(function(){   
    $('#button-b').trigger('click');
});
$('#button-b').click(function(){   
    // do something
});

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

于 2013-07-31T16:43:25.183 回答