0

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

これは無効にする私のJavaScriptの一部です

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


return;

これが私のフォームです

<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>

ありがとう

4

4 に答える 4

0

このファイルを HTML ページに含めます: https://github.com/carhartl/jquery-cookie/blob/master/jquery.cookie.js

そして、費やされた時間が経過した後、Cookie を設定します。 $.cookie('block','1')

ページの開始時に、次のコマンドを使用して送信を有効または無効にすることができます。

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

ただし、この方法はクライアント側のみであるため、Web サイトを保護するために使用しないでください。フォームが投稿されないようにしたい場合は、サーバー側で使用してください。

編集:ここで完全な解決策

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);
});

</p>

于 2012-04-20T09:46:35.147 に答える
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

フォームが無効になっていても、有効にしてデータを送信できるからです。

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

于 2012-04-20T10:13:04.760 に答える
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\"";} ?> />

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

上記の提案は、ページのリロード時に機能します。

于 2012-04-20T10:58:22.413 に答える
0

.serialize()jquery のメソッドを使用して、フォームの状態を保存できます。次に、逆シリアル化プラグインを使用して、フォームを逆シリアル化 (復元) できます

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

フォームを保存する

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

formState次に、を文字列として Cookie に保存します。ページがリロードされると、cookie から formState を読み取り、フォームを逆シリアル化できます。

復元フォーム:

$("#MakeBid").deserialize(formState ,
callback: function(name,value){
$('input[name="'+name+'"]').val(value);
});
于 2012-04-20T09:39:24.403 に答える