2017-02-18 9 views
0

私は、ajax経由でフォームを送信するJQueryプラグインを作成しました。それはうまくいっていた。私はいずれかのボタンをクリックすると、フォームが二回提出されjqueryプラグインを同じページの2つのボタンに別々に適用する

<form> 
    <input type="submit" id="CreateAndExit" value="Create and Exit" /> 
    <input type="submit" id="CreateAndAdd" value="Create and Add Another" /> 
</form> 


$('#CreateAndExit').Save(optionsA); 

$('#CreateAndAdd').Save(optionsB); 

below-として2つが同じフォーム上のボタンを提出使用しようとするが、問題が発生します。 beforeSendFunction()のボタンの変更は、他のボタンにも適用されます。この問題を克服する方法

(function ($) { 

$.fn.Save = function (options,validationRules, onBeforeSend, onSuccess, onError, onComplete) { 

     return this.each(function() { 

     var $This = $(this); 

     var settings = $.extend({ 
      ..... 
     }, options); 

     var $Form; 
     if (settings.form == "" || settings.form == "form") { 
      $Form = $This.parents('form'); 
     } 
     else { 
      $Form = $(settings.form); 
     } 

     $This.on('click', function (event) { 
      $Form.submit(); 
     }); 

     $Form.on('submit', function (event) { .... }); 

     function beforeSendFunction() { 
       $This.val('Working…'); 
       $This.attr('disabled', 'disabled'); 
     } 
    }); 
}; 

}(jQuery)); 

- ここ

は私のプラグインの構造(不要な行を削除している)のですか?

+0

idが既に定義されているときにクリックイベントを使用できるのと同じフォームに2つの送信ボタンがあると思いました... – user7417866

+0

送信イベントハンドラですでに 'preventDefault()'を呼び出していますか? – JakeParis

答えて

0

おそらく2つの送信ボタンはありません。しかし、あなたの問題を解決するには、カスタムアクションを実行する前に、フォームが自然に送信されないようにする必要があります。ちょうどあなたの.save()機能

それだけで呼び出すことが、clickハンドラはあなたのコード内のフォームsubmitハンドラが冗長である呼び出す提出した前に提出またはクリックハンドラ内

e.preventDefault(); 

を呼び出します。送信ハンドラを使用し、送信ボタンクリックハンドラを削除するだけです。

+0

不要な行が削除されます。そして私は2つのボタンが必要です。 –

+0

'preventDefault'を呼び出すことは不要です。 :) – JakeParis

+0

私はそれを知っています。ありがとう。 –

関連する問題