避免通过Javascript多次提交表单

时间:2014-02-26 04:26:26

标签: javascript html forms validation

让我明确标题的含义: 在我的代码中,对于依赖于字段“t1”的一个字段的验证目的,我需要自动提交我的表单一次(Just Once)。但我的下面代码无限次地提交它,我知道它发生的原因。 我猜每次表单在标题运行中再次提交JS时就会出现Reason。请帮我避免这个。以下是我的代码:

<html>
<head>
<script>
window.onload = function()
{   
    var f = document.getElementById("CheckForm");
    var temp = document.getElementById("CheckForm.t1");
    if(f.name == "CheckForm")
    {
      var temp1 = document.getElementById("t1");
      temp1.value = "Task";
    }
      document.CheckForm.submit();
}
</script>
</head>
<body>
      <form name="CheckForm" id="CheckForm" method="Post">
    <input type="text" id="t1" name="t1"/>
</form>
</body>
</html>

我尝试使用变量如flag和static变量来停止它,例如arguments.callee.count = ++ arguments.callee.count || 1并将我的CheckForm.submit()行放在if子句中。但没有任何效果。任何建议或帮助都很明显。

3 个答案:

答案 0 :(得分:1)

<html>
<head>
<script>
window.onload = function()
{   
    var f = document.getElementById("t1");
    var temp = document.getElementById("CheckForm.t1");
    if(f.name == "CheckForm")
    {
      var temp1 = document.getElementById("CheckForm.t1");
      temp1.value = "Task";
    }
      if(window.location.search=="")document.CheckForm.submit();
}
</script>
</head>
<body>
      <form name="CheckForm">
              <input type="text" id="t1"/>
      </form>
</body>
</html>

答案 1 :(得分:1)

当然,你的表格比以下更复杂:

  <form name="CheckForm">
          <input type="text" id="t1">
  </form>

由于没有成功的控件(唯一的控件没有名称),因此不会向服务器提交任何内容。

由于表单只是提交到同一页面,因此您可以提交隐藏值,如:

  <form name="CheckForm">
          <input type="text" id="t1">
          <input type="hidden" name="hasBeenSubmitted" value="yes">
  </form>

现在,当表单提交新页面的网址时,将包含...?hasBeenSubmitted=yes,以便您可以在网址中查找该值,例如

if (/hasBeenSubmitted=yes/.test(window.location.search)) {
    // this page loaded because the form was submitted
}

如果存在,请不要再次提交表格。

答案 2 :(得分:0)

因此,由于您使用的是post方法,最简单的方法就是提交一个新的url,但是你似乎已经设置保持表单提交到同一个url,在这种情况下你使用的是php(或者实际上是您可以检查http请求是否具有值t1

的post属性
<?php 

if(isset($_POST['t1']){
        $your_text=$_POST['t1'];
        /*do some string checking to make safe and the throw into your database or mdo whatever you please with data
        if you wanted to include the ip address of the user you can get a basic and most likely client ip address like so

        $ip_address= $_SERVER['REMOTE_ADDR'];

        if you are handing a mulitpage form look into php session or similar tech ... cookies is kind of over kill for this scenario

         then include a succes page as the form has been submitted
         or you could end php with this tag ?> and then have your html and start again with <?
        */

        include 'form_submitted.php';

}else{
    //this would be the html page that you included in your question and can be handle in same ways as form submitted 
    include 'my_form.php'
}
?>

IP地址可能不是最好的,因为它会阻止2个用户填写表格,如果他们在同一个局域网中,例如。 2个人在同一个办公室或同一个房子(如果您的页面是在全球网络上的行为)。 我会看看@RobG的答案,因为他基本上建议使用get而不是post来发送相同类型的东西 ANyways希望这有帮助