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

您可以使用.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 回答
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");
});

但请记住,这种方法只是客户端,所以不要用它来保护你的网站,如果你想防止表单被发布,那就在服务器端做。

编辑:这里是完整的解决方案

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