目标:我希望能够将给定元素的确认行为与它可能绑定到它的其他事件处理程序分离。所以给出以下简单的例子
var someApp = {
"init": function(){
$("a").click(someApp.doAnchorStuff);
$("button").click(someApp.doButtonStuff);
$("#submitButton").click(someApp.doSubmitStuff);
$("a, button, #submitButton").click(someApp.confirmAction);
},
"doAnchorStuff": function(){//stuff},
"doButtonStuff": function(){//stuff},
"doSubmitStuff": function(){//stuff},
"confirmAction" : function(){
//intercept the flow of control and freeze everything, no other
//handlers on the elements this is being triggered on get called
//display confirm dialog.
//IF user confirms, unfreeze, let the other handlers get triggered.
//If Not, do not let other event handlers get triggered
}
}
$(function(){
someApp.init();
});
如果这没有意义,我很乐意澄清。
一个不工作的小提琴示例:) http://jsfiddle.net/7jbt9/
答案 0 :(得分:2)
要完成这项工作,您需要做两件事:
需要首先附加confirmAction点击处理程序。执行此操作会使其首先在链中执行。
对传递给回调函数的事件对象调用stopImmediatePropagation()方法。这将停止执行该事件的任何其他回调。
"confirmAction": function(e) { if (!confirm("Continue?")) { e.stopImmediatePropagation(); } }