2016-05-06 16 views
0

私のフォームに2つの送信ボタンがあります。クリックした後に送信ボタンを無効にするには、次のコードを使用しています。ただし、フォームを送信すると、最初の送信ボタンが常に表示されます(2番目の送信ボタンをクリックしても)。私は2番目の送信ボタンをトリガーしたいと思います。複数の送信ボタンがあるフォームで1つの送信ボタンを無効にする

<script> 
$('input[type=submit]').click(function() { 
    $(this).attr('disabled', 'disabled'); 

    //This line submits the form as if the first button was clicked 
    $(this).parents('form').submit(); 
}); 
</script> 

<form method="post"> 
    <!-- other form elements here --> 
    <input type="submit" value="button1"> 
    <input type="submit" value="button2"> 
</form> 
+1

(また、そうでない場合は、あなたのjqueryのセレクタは何も見つけないでしょう、私は右のあなたのhtmlの後にあなたのJSコードを移動気づきます)両方の入力ボタンを取得してそのように無効にするには、同じセレクタを使用します。 – Ivan

+0

同じフォーム内に2つの送信ボタンがある場合は、そのボタンが説明しています。 – Hozikimaru

+0

なぜ2つの送信ボタンを使用していますか?彼らは別々に提出するはずですか? – nurdyguy

答えて

1

ここにあなたの問題は、競合状態に実行されていることである、と私は説明します: あなたはボタンを無効にしたいが、そうすることで、あなたはまた、使用して(フォームを送信するためのオプションを無効にしていますそのボタンをクリックしてください)、あなたの解決策は、自分自身で(JSコードからsubmit()関数を呼び出すことによって)サブミットを処理することです。
submit()関数(jsから)を呼び出すと、クリックされたボタンの値が取得されないという問題があります。

ここにあるもう1つの問題は、ボタンに名前がないということです。つまり、あなたのサーバー上で値を取得できないということです。

とにかく - ここには2つのオプションがあります。
最初の1つ - 非表示のフィールドを持ち、ユーザーがボタンをクリックすると、そのフィールドの値をクリックされたボタンの値に設定し、フォームを送信します。サーバー上のデータを受信します。

2番目の方法は、フォームを送信した直後にボタンを無効に設定することです。ここで は一例です:

<form method="post"> 
    <!-- other form elements here --> 
    <input type="submit" name="a" value="button1"> 
    <input type="submit" name="a" value="button2"> 
</form> 
<script> 
$('input[type=submit]').click(function() { 
    var clickedBtn = $(this) 
    setTimeout(function() { 
     clickedBtn.attr('disabled', 'disabled'); 
    }, 1); 
}); 
</script> 

はすべて私に言えることは、あなたのHTMLの構造を知らなくても

関連する問題