2017-09-02 8 views
2

私は、フォームを送信する前に確認ダイアログを表示しようとしている動作しません:成功しオフが正しく

$('body').on('submit', 'form[data-confirm-dialog-text]', (e) -> 
    form = $(this) 
    e.preventDefault() 
     $.show_dialog(form.data('confirm-dialog-title'), form.data('confirm-dialog-text'), form.data('ok-text'), form.data('cancel-text'), (-> 
     form.off('submit').submit() 
    )) 
) 

を私は次のようにします。form.off('submit').submit()が、フォームがインバウンドではないことを意味し、ダイアログを確認して得続けます。

$('body').on('submit', 'form[data-confirm-dialog-text]'$('form[data-confirm-dialog-text]').on('submit',に変更すると問題なく動作します。違いは何ですか?何が間違っていますか?

+1

form.off('submit').submit() 

を変更.... – epascarello

答えて

1

イベントがbodyに結合している、あなたはbodyからイベントを削除する使用する必要があります。イベントは、本体ではなく、フォームにバインドされているためので、

$('body').off('submit', 'form[data-confirm-dialog-text]'); 
form.submit(); 
1

jQueryの.off()ドキュメントから:

.off()方法は.on()に添付されたイベントハンドラを削除します。引数なしで.off()を呼び出すと、要素に接続されているすべてのハンドラが削除されます。特定のイベントハンドラは、イベント名、名前空間、セレクタ、またはハンドラ関数名の組み合わせを提供することで、要素上で削除できます。 複数のフィルタリング引数が指定された場合、提供されるすべての引数は、削除されるイベントハンドラと一致する必要があります。

それはあなたが.onへと.off()に同じ引数を使用する必要がありますを意味します。

form.off('submit').submit(); 

へ::だから、変更しようと

$('body').off('submit', 'form[data-confirm-dialog-text]'); 
form.submit();