2012-08-14 23 views
0

我有我使用的是上的弹出按钮一个javascript链接:多个.click()绑定。我如何强制一个绑定最后执行?

<a href="#" class="submit-action close-modal">Submit</a> 

“提交行动”类有一个jQuery。点击()上绑定执行.submit()形式嵌入在模态中。 “close-modal”类有一个.click()绑定关闭模式。

$(".submit-action").click(function() ($("#someForm").attr("action", "someURL"); 
$("#someForm").submit(); 

this.close = function() { 
    $("#modal").hide(); 
    $.unblockUI(); 
}; 

$(".close-modal").click(function()(this.close); 

目前,当我点击这个按钮时,关闭模式绑定似乎是先执行并关闭模式,然后再提交表单。所以弹出窗口关闭而不执行提交。有没有一种方法可以强制“submit-action”绑定在不结合两个.click()绑定的情况下先执行?

+1

请发送js码请 – PaperThick 2012-08-14 14:43:53

+0

您不能。事件处理程序不是以可靠的跨浏览器顺序触发的。确保一件事发生在另一件事之后的唯一方法是利用您使用的任何第三方库为该处理程序提供的回调。如果他们没有建立回调,那么你就无能为力(除了找到一个实际设计好的替代品)。 – 2012-08-14 14:48:39

+0

可能重复的[如何订购事件与jquery绑定](http://stackoverflow.com/questions/290254/how-to-order-events-bound-with-jquery) – mkoryak 2012-08-14 14:49:45

回答

3

他们开火,在它们所连接的顺序,所以你绑定后绑定接近模态提交行动,它应该按照你想要的顺序进行。

小提琴1:http://jsfiddle.net/johnkoer/2xNwn/1/

小提琴2:http://jsfiddle.net/johnkoer/2xNwn/2/

从jQuery documentation(重点煤矿):

默认情况下,大多数事件冒泡从原始事件目标 的文档元素。在沿途的每个元素上,jQuery调用已附加的匹配事件处理函数的任何 。通过调用 event.stopPropagation(),处理程序可以防止事件进一步冒泡文档树(从而阻止 处理这些元素的处理程序)。然而,附加在当前 元素上的任何其他处理程序都将运行。为了防止这种情况,请致电 event.stopImmediatePropagation()。 (绑定到一个元素 调用事件处理程序以相同的顺序,他们的约束。

+0

我切换命令我绑定两个它完美的工作。谢谢。 – user886596 2012-08-14 14:58:21

1

只要有一个在另一个上面就会导致这样的情况发生第一:

jsFiddle DEMO

$(document).on('click', '.submit-action', function() { 
    alert('submit-action click'); 
}); 


$(document).on('click', '.close-modal', function() { 
    alert('close-modal click'); 
}); 
0

如果你想关闭提交完成后,刚模态。触发该动作以关闭ajax的“完整”事件的模态。