2012-04-20 10 views
0

私は自分のサイトでJavaScriptを使ってタイマーをゼロにしてからメッセージを表示し、送信ボタンを無効にしてより多くのデータがデータベースに入力されないようにしています。タイマーが終了したときにサブミットボタンを無効にするようにしましたが、ページがリロードされるとサブミットボタンが有効になります。私はフォームの状態を保存する必要があることを知っていますが、私はこれについてどうやって行くのか分かりません。タイマーの終了時に送信ボタンを無効にするjqueryからフォーム状態を保存するにはどうすればいいですか?

これは

function CountBack(secs) { 
if (secs < 0) { 
document.getElementById("cntdwn").innerHTML = FinishMessage; 
$("input[type=submit]").attr("disabled", "disabled"); 


return; 

これはあなたのフォームの状態を保存するためのjQueryの.serialize()方法を使用することができます

<form id="MakeBid" action="MakeBid.php" method="POST"> 
<input type="hidden" name="propertyID" value ="1"/> 
<div>Bid Now <input type="text" name="pricesoldfor"/></div> 
<input id = "submit" input type="submit" value="Submit" /> 
</form> 

おかげ

+0

クッキーを使用して状態を保存する – Nemoy

答えて

0

私の提案:

  1. サーバー上で状態をキープ。
  2. フォームをクライアントに送信する前に、彼がデータベースに書き込むことが許可されているかどうかを確認してください。
  3. 埋め込みパラメータのフォームをMyForm.noSubmit = true;のように送信します。
  4. オプションで、サーバーをポーリングし、さらにデータを受け入れるかどうかを確認します。だから、

、サーバー上でPHPを持っていると仮定すると、あなたはこのような何か取得:

var MyForm.noSubmit = <?php echo ($MyDB->acceptsData()) ? "false" : "true"; ?> 

または

<input <?php if (!$MyDB->acceptsData()) {echo "disabled=\"disabled\"";} ?> /> 

はもちろんの実装に依存します。

上記の提案は、ページのリロードに役立ちます。

0

私のフォームでは無効になり、私のjavascriptの私の一部であり、 。次に、あなたのフォームは、その後、クッキーに文字列としてformStateを保存し、フォーム

http://archive.plugins.jquery.com/project/deserialize

ストア(復元)デシリアライズする

var formState = $("#MakeBid").serialize(); 

をデシリアライズプラグインを使用することができます。ページがリロードされると、フォームからフォームを読み込み、フォームを逆シリアル化することができます。

フォームを復元:あなたのページのオープニングで $.cookie('block','1')

:費やした時間はクッキーを設定した後、https://github.com/carhartl/jquery-cookie/blob/master/jquery.cookie.js

そして:

$("#MakeBid").deserialize(formState , 
callback: function(name,value){ 
$('input[name="'+name+'"]').val(value); 
}); 
+0

どのようにしてフォームステートをクッキーとして文字列として保存しますか?私はこの答えがちょうどかなり複雑なように見えるものだと思う。 – Jobbo05

+1

formStateはすでに文字列です。だから、他のものを保管するのと同じようにクッキーに保管してください!この値をクッキーに保存することはお勧めできません。クライアントはいつでもクッキーをクリアできるからです!あなたのサーバーにformStateを保存することができるかもしれません! –

0

は、HTMLページでこのファイルをインクルード次の方法で送信を有効または無効にすることができます

jQuery(function($){ 
    if($.cookie('block')) 
    $('#submit').attr("disabled","disabled"); 
}); 

しかし、この方法はクライアント側であるため、ウェブサイトを保護するためには使用しないでください。フォームを投稿しないようにするには、サーバー側で行うようにしてください。

編集:ここではthe full solution

var bidDuration = 10000 
    , bidFinishedMessage = "C'est fini !!"; 

jQuery(function($){   
    var finishBid = function() { 
    $("#submit").attr("disabled", "disabled"); 
    $("#cntdwn").html(bidFinishedMessage); 
    $.cookie('blockBid','1'); 
    }; 

    if($.cookie('blockBid')) 
    $('#submit').attr("disabled","disabled"); 

    setTimeout(finishBid, bidDuration); 
}); 

+0

私はこのオプションを試しましたが、jsファイルを保存しても動作しなかったようですが、jsにコードを追加しましたが、送信ボタンが再表示されなくなったようです。 – Jobbo05

+0

このリンクをチェックすると、私が作ったスクリプトは完璧に動作しています;)http://jsfiddle.net/ErkA3/ – Tronix117

0

あなたは間違いなくサーバー側に提出するかどうかを有効にする必要があります。十分なデータが提出されている場合は、サーバー側でフォームを無効にして、それを聞くことを無効にしても、それについて心配する必要はありません。擬似コードで

例:

If enough datas are in the database, don't write to it and leave the script 
Else write normally, it means the countdown's not reached the end 

フォームが無効になっている場合でも、私はまだそれを有効にし、あなたにいくつかの件のデータを送信することができますので。

クライアントを信頼しないでください。

+0

私はあなたの答えに同意しますが、私はユーザーにはもう入札できないことを見て欲しい、そうでなければ入札とオークション終了するだろう。あなたの応答を評価してください。 – Jobbo05

+0

あなたはまだ無効になっているフォームを表示できます。また、サーバー上で処理を停止します。 –

+0

フロリアンにはポイントがあります。状態はサーバーに保存する必要があります。ユーザーはフォームを使用せずに情報を送信できることに注意してください。今すぐボタンのために:あなたのページを提供するとき - あなたのデータベースが入力を受け入れる準備ができているかどうかをチェックし、そうでなければ、送信ボタンを無効にします。 – Oleg

関連する問題