我有一个使用 jQuery 附加事件的 HTML 按钮bind()
,如下所示:
$('#mybutton').bind('click', myFirstHandlerFunction);
在myFirstHandlerFunction
中,我希望这个处理程序用一个新的处理程序替换自己mySecondHandlerFunction
,就像这样:
function myFirstHandlerFunction(e) {
$(this).unbind('click', myFirstHandlerFunction).bind('click', mySecondHandlerFunction);
}
在第二个单击处理程序中mySecondHandlerFunction
,我想将按钮切换回其原始状态:取消绑定mySecondHandlerFunction
处理程序并重新附加原始处理程序,myFirstHandlerFunction
如下所示:
function mySecondHandlerFunction(e) {
$(this).unbind('click', mySecondHandlerFunction).bind('click', myFirstHandlerFunction);
}
这很好用,除了一个小细节:因为点击事件还没有通过按钮的每个点击处理程序传播,所以点击事件被传递到按钮的下一个点击处理程序,它恰好是刚刚绑定的处理程序前一个处理程序。最终结果mySecondHandlerFunction
在执行后立即myFirstHandlerFunction
执行。
通过调用每个处理程序可以轻松解决此问题e.stopPropagation()
,但这具有取消可能已独立附加的任何其他单击处理程序的负面影响。
有没有办法在两个点击处理程序之间安全、一致地切换,而不必停止点击事件的传播?