0

我有一个 javascript 链接,用作弹出窗口上的按钮:

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

“submit-action”类有一个 jQuery .click() 绑定,它在嵌入模式的表单上执行 .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);

目前,当我单击此按钮时,关闭模式绑定似乎首先执行并在提交表单之前关闭模式。所以弹出窗口关闭而不执行提交。有没有一种方法可以强制“提交操作”绑定首先执行而不结合两个 .click() 绑定?

4

3 回答 3

3

它们按照绑定的顺序触发,因此在绑定提交操作后绑定关闭模式,它应该按照您想要的顺序进行。

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

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

从 JQuery文档(强调我的):

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

于 2012-08-14T14:46:35.163 回答
1

简单地将一个放在另一个之上将导致它首先发生:

jsFiddle 演示

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


$(document).on('click', '.close-modal', function () {
    alert('close-modal click');
});
于 2012-08-14T14:46:34.223 回答
0

如果您想在提交完成后立即关闭模式。在 ajax 的“完成”事件上触发关闭模式的操作。

于 2012-08-14T14:48:00.640 回答