0

ポップアップのボタンとして使用しているJavaScriptリンクがあります。

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

「submit-action」クラスには、モーダル内に埋め込まれているフォームで.submit()を実行するjQuery .click()バインディングがあります。「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);

現在、このボタンをクリックすると、フォームが送信される前に、モーダルを閉じるバインディングが最初に実行され、モーダルを閉じているように見えます。そのため、送信を実行せずにポップアップが閉じます。2つの.click()バインディングを組み合わせずに、「submit-action」バインディングを最初に強制的に実行する方法はありますか?

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の「complete」イベントでモーダルを閉じるアクションをトリガーします。

于 2012-08-14T14:48:00.640 に答える