1

目标:我希望能够将给定元素的确认行为与它可能绑定的其他事件处理程序分离。所以给出以下简单的例子

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/

4

1 回答 1

2

要完成这项工作,您需要做两件事:

  1. 需要先附加 confirmAction 点击​​处理程序。这样做将使它在链中首先执行。

  2. 对传递给回调函数的事件对象调用 stopImmediatePropagation() 方法。这将停止执行该事件的任何其他回调。

"confirmAction": function(e) {
    if (!confirm("Continue?")) {
        e.stopImmediatePropagation();
    }
}
于 2013-08-06T17:11:47.800 回答