2016-04-11 10 views
2

外部ハンドラを提出します:jQueryの検証プラグインは、フォームを停止する方法を私はjqueryvalidationでフォームを検証するためのグローバルなスクリプトを持っている

$("#myform").submit(function(){ 
    $("body").append("<p>other handler</p>"); 
    return false; 
    }); 

第2ハンドラのreturn false;がフォーム送信をブロックしないのはなぜですか? 私もpreventDefaultとstopProparationを試しましたが、うまくいきません。

https://jsfiddle.net/brj7ttdn/5/

+0

私はあなたのjsfiddleでこのような状況を見ることができない、それはすべてのフォームをループにeach()機能を使用して個別にプラグインをバインドする修正するには? –

+0

申し訳ありませんが、私のフィドルは私のセッションのためだけに更新されました。今、私は最後のバージョンへのリンクを更新します。 – Tobia

+0

@Tobia私の答えがあなたに役立つかどうか教えてください –

答えて

-1

あなたがでpreventDefault(試用できます)適切に下記のように:

$(function(){ 
    $("form").submit(function(event){ 
    $("body").append("<p>other handler</p>"); 
    event.preventDefault(); 
    }); 
}); 

Fiddleを確認してください。

+0

最初の検証ハンドラを削除したため、fiddleが動作します。私の場合、私は2つのハンドラを持っています。最初のもの(メインプロジェクトのグローバルで変更できません)と私のカスタムハンドラは1つの形式になっています。 – Tobia

+0

申し訳ありませんが、私のフィドルは私のセッションのためだけに更新されました。今、私は最後のバージョンへのリンクを更新しました。そして、あなたは私の状況を理解できると思います。 – Tobia

-1

ボタンのクリックイベントを無効にすると、フォームの送信が無効になります。 変更

$("#myform").submit(function(e){ 

フォームは、 "ENTER" キーを押しにより提出する場合は

$("button").click(function(e){ 

に、あなたはキー操作のアクションをトリガーとアクションを停止しなければならないようなスクリプトを提出する:

$("input").on("keypress", function(e){ 
    var keypress; 
    if(window.event) { // IE      
     keypress= e.keyCode; 
    } else if(e.which){ // Netscape/Firefox/Opera     
     keypress= e.which; 
    } 
    if (keypress == 13) { 
     e.preventDefault(); 
    } 
}) 
+0

私は "ENTER"を押してテキスト入力を押してもフォーム送信を無効にしたいと思っています...そのボタンは、テストの目的でのみ送信されます。 – Tobia

+0

あなたはjavascriptでフォームを送信しますか?スクリプトを変更します。そうでない場合は、フォームを送信するためのボタンをクリックする必要があります。 –

+0

@Tobia:submit()アクションを使用して検証します。スクリプトを使用しても、同じアクションを使用して無効にすることはできません。 submit()アクションが呼び出される前にイベントをトリガーする必要があります。したがって、フォームを "ENTER"で送信するか、またはボタンをクリックすると、スクリプトを修正します。 –

1

でしますおそらくグローバルsubmithandlerを削除し、特定のものを実行させるだけでしょうか?このように:

$(function(){ 

$("form").validate({ 
    submitHandler: function(form) { 
    $("body").append("<p>validate</p>"); 
    form.submit(); 
    } 
}); 

$('#myform').off('submit') 

$("#myform").submit(function(e){ 
    $("body").append("<p>validate</p>"); 
    $("body").append("<p>other handler</p>"); 
    e.preventDefault(); 
    }); 
}); 

あなたは、他のハンドラからの検証を呼び出すために、それはあまりにも痛みを伴うことはないかもしれませんが、ちょうどここでform.valid()コール

0

Working Fiddleとコードであることを確認しています以下の通りです。

$(function() { 

    $("form").validate({ 
    submitHandler: function(form) { 
     $("body").append("<p>validate</p>"); 

     if ($(form).data('has-customSubmit-event') === true) { 
     $(form).trigger('customSubmit'); // trigger your custom submit. 
     } else { 
     form.submit(); 
     } 
    } 
    }); 

    $('#myform').data('has-customSubmit-event', true); // add a pointer to say there is a custom handler for this form, 

    $("#myform").on('customSubmit', function(e) { 
    $("body").append("<p>other handler</p>");  
    //$(this).submit(); // if you want to submit this form. 
    }); 

}); 

アイデアは、その有効なプラグインのは、すなわちform.submit();を提出したが、カスタム・ロジックを実行して行い、その後、いずれかの提出または提出いけない場合は、このフォームのために言ってポインタを追加することです。

私が話していポインタ今すぐプラグインハンドラを提出し、これが

$('#myform').data('has-customSubmit-event', true);

あるこのフォームは、それを行う実行するためにカスタムハンドラを持っている場合は、チェックが言っている場合、我々は提出他に、持つことができます形。また

if ($(form).data('has-customSubmit-event') === true) { 
    $(form).trigger('customSubmit'); // trigger your custom submit. 
} else { 
    form.submit(); 
} 

あなたはこのように、検証プラグイン$("form").validate({..を追加する方法。だから、私はこれが最初のフォーム(理由はわかりません、Fiddle With Issue)のためだけにサブミットハンドライベントをトリガすることがわかったのです。

だからExample Fiddle

+0

私はこの解決策について考えましたが、主な問題は、フォームがバリデーターである場合にのみ2番目のハンドラを実行する必要があるため、イベントのバブルを制御できる場合、 – Tobia

+0

これは良い設計フローではありません。このようなことをしたい場合は、検証関数を記述して呼び出すと、設計が一連のプロセスのリスクを負うことになります。 –

+0

@Tobia私は自分の答えを更新しました。 –

関連する問題