2012-11-28 3 views
24

私はそれについて多くの質問があることを知っていますが、いくつかの解決策を試してみましたが、何も効果がありません。私は、フォーム持っている私のDjangoのアプリでjQueryを使ってサブミットした後にボタンを無効にする

<form method='post'> 
    <button type='submit'>Send</button> 
</form> 

を私は、ユーザーがフォームを送信した後にボタンを無効にするwan't。他の質問を使用して、私は次のように、いくつかのことを試してみました:私はクリックすると

<button type='submit' onclick="this.disabled=true">Send</button> 

、ボタンが無効になっている...しかし、フォームは送信されません。それぞれの試行で同じ問題が発生しました。ボタンが無効になっているか、フォームが送信されています。私は両方を行う方法を見つけることができません...

私はChromeを使用しています。なぜ私はこの問題を抱えていますか?ご協力ありがとうございました。

+0

あなたは '

答えて

65

これを試してみてください。このような

$('form').submit(function() { 
    $(this).find("button[type='submit']").prop('disabled',true); 
}); 
+1

完璧!できます。私はできるだけ早く答えを受け入れます。 –

+12

これは送信ボタン値を送信しないようにします。通常は問題ではありませんが、それは可能です。 – Jake

0

てみてください、

<input type="submit" value="Send" onclick="javascript=this.disabled = true; form.submit();"> 
+0

まだ投稿していません... –

+0

@JulietteDupuisが更新されました。 –

5

あなたが親フォームのsubmitイベント時に、それを無効にできます。

$("form").on("submit", function() { 
    $(this).find(":submit").prop("disabled", true); 
}); 

は、このコードを実行するようにしてくださいHTMLFormElementがロードされた後でなければ、何もバインドされません。結合が行われることを確保するために、document-readyブロック内からこれをオフに解雇:このような

// When the document is ready, call setup 
$(document).ready(setup); 

function setup() { 
    $("form").on("submit", function() { 
     $(this).find(":submit").prop("disabled", true); 
    }); 
} 
1

何かがうまくいくかもしれません。

<button id="btnSubmit" type='submit'> Send </button> 

<script> 
    $("#btnSubmit").on("click", function(e){ 
      e.PreventDefault(); 
      $(this).closest("form")[0].submit(); 
      $(this).prop('disabled',true) 
    }); 
</script> 
1

これはいかがですか?

onclick="this.style.visibility='hidden';" 

私は、無効にする代わりに、非表示にします。

ボタン、直接的な無効化だけvidible隠さ無効、disabled

onclick="this.style.disabled='true';" 
+0

私はこれを試してうまくいきましたが、確認ボタンが隠れています。私のページで確認とキャンセルのボタンがあります。 onClickは私のためには機能しませんでした。 – raja777m

1

と私のバリアントに行きたい場合は:私はこれをよりよく好き

<input type="submit" name="namebutton" value="Nahrát obrázek" onclick="this.style.visibility='hidden';" ondblclick="this.style.visibility='hidden';"/> 
+0

私の場合、これを試してうまくいったが、確認ボタンが隠れている。私のページでボタンを確認してキャンセルすると、両方のボタンを隠しておきたい。 – raja777m

0

を:

<script> 
    var submit = false; 
    $('form').submit(function() { 
     if (submit) { return false; } 
     else { submit = true;} 
    }); 
</script> 

この方法では、Enterキーが2回以上提出されることも防ぎます

+0

いいえ、それは送信していない – raja777m

0

私はChromeを使用しています。なぜ私はこの問題を抱えていますか?

まあ、私はこれに対処初めて、私はこのようにそれを解決:

function blockButtons() { 
    $('button:submit').click(function(){ 
    $('button:submit').attr("disabled", true); 
    }); 
} 

をこれは、Mozilla Firefoxで完璧に働いたが、...。Google Chromeは、それを提出しなかったので、私はこれにそれを変更:

function blockButtons() { 
    $('button:submit').click(function(){ 
     var form = $(this).parents('form:first'); 
    $('button:submit').attr("disabled", true); 
    $('button:submit').css('opacity', 0.5); 
    form.submit(); 
    }); 
} 

これはMozilla Firefoxの中で両方を働いていた、しかし、その後IEの古いバージョンを使用して、ユーザーの皆様のいくつかは、二つの提出を持つのトラブルを経験しました。つまり、javascriptによって開始されたものと、onclickの事実を無視してブラウザによるものと、とにかく送信したものです。これはe.preventDefaultで修正できます。

8

私はこれが好きです、DOMをトラバースする必要はありません。 setTimeout関数の 入れ機能、要素をダブルクリックしたくない場合は、これは(.oneを使用し、setTimeoutを0

$(document).ready(function() { 
$("#btnSubmit").click(function() { 
    setTimeout(function() { disableButton(); }, 0); 
}); 

function disableButton() { 
    $("#btnSubmit").prop('disabled', true); 
} 
}); 
0

場合でも、提出作ると無効化ボタンの後にできます)

.one()

0

<button id="submit" type="submit">Send</button> 
<script> 
$(function() { 
$("#submit").one("click", function() { 
//enter your submit code 
}); 
}); 

は、Chromeで問題を手に入れたフォームを送信されませんでした。異なるコードの束を試みたが、これは私のために最高の仕事を何だった(と芋最高に見える):

$('#form_id').submit(function() { 
    $("input[type='submit']", this) 
     .val("Please Wait...") 
     .attr('disabled', 'disabled'); 
    return true; 
    }); 

は、フォームのIDでform_idを交換してください。クラスはあまりにも当然の仕事:$('.form_class')

出典:JavaScript Coder

0

あなたはこのような何かを行うことができます。それは私とうまく動作します。

<form method='post' onSubmit='disableFunction()'> 
// your code here 
</form> 

は次にスクリプトで、この

<script> 
function disableFunction() { 
    $('#btn_submit').prop('disabled', true); 
} 
</script>