2012-12-20 64 views
8

我正在尝试使用照片提交表单。在用户加载照片后,他按下提交按钮,我希望表单暂停10秒,为这10秒的进度条设置动画,然后提交表单,你们可以说我做错了什么,看起来不像在10秒后提交表格。 下面是代码:使用javascript提交的暂停表单

HTML:

<form action="uploadpic.php" method="post" id="upload_form"> 
<input type="text" name="title" id="title"> 
<p id="title_p">Title</p> 

<hr /> 

<input type="text" name="theme" id="picture_theme" size="40"/> 
<p id="theme">Picture Theme<img src="../simages/info.gif" id="info" width="12" height="12" style="margin-left:10px;"></p> 
<hr /> 

<div class="custom-upload"> 
    <input type="file" name="picture" id="true_pic" /> 
    <div class="fake-file"> 
     <input disabled="disabled" > 
    </div> 
</div> 
<p id="upload_pic">Upload picture</p>​ 

<input type="submit" name="submit" id="submit" value="Upload" /> 
</form> 

JAVASCRIPT:

form = document.getElementById("upload_form"); 
    size=1; 
    form.onsubmit = function() 
    { 
     if (size < 10) 
     { 
      setTimeout(delayedSubmit,1000); 
     } 
     return false; 
    } 
    function delayedSubmit() { 
     size++; 
      if (size<5) 
      { 
       setTimeout(delayedSubmit,1000); 
       alert("Counting "+size);  
      } 
      else 
      { 
       alert("Form submitted"); 
       form.submit(); 
      } 
    } 

PHP:

<?php 

if ($_POST['submit']) 
{ 
    $title = $_POST['title']; 
    $theme = $_POST['picture_theme']; 
    echo $title," ",$theme; 
} 




?> 

我可以告诉大家,表单不会被提交什么事实上,PHP变量不会显示任何内容,然后页面不会加载。

+0

看跌'的console.log(形式)'提交表单前,它显示了什么? – Barmar

+0

它什么也没有显示.. – southpaw93

+1

确保在完全加载DOM后分配变量'form'。 – Barmar

回答

4

当一个表单有一个名称和/或id为“submit”的按钮时,它将不再工作(我的旧帖子是错误的)。

所以,你需要做的是改变按钮的名称/ ID:

<input type="submit" name="submit-button" id="submit-button" value="Upload" /> 

记住:你需要改变你的PHP,太:

if ($_POST['submit']) 
{ 
    $title = $_POST['title']; 
    $theme = $_POST['picture_theme']; 
    echo $title," ",$theme; 
} 

if ($_POST['submit-button']) 
{ 
    $title = $_POST['title']; 
    $theme = $_POST['picture_theme']; 
    echo $title," ",$theme; 
} 
+1

“当表单有一个提交按钮时,form.submit()不再工作了” - 你能解释为什么你会这么想吗? – tborychowski

+0

我试过你的方法,但现在当我点击按钮什么都没有发生......我很困惑.. – southpaw93

+0

@tborychowski我有一部分是错误的;我会编辑它 – looper

1

我想简化javascript:

form = document.getElementById("upload_form"); 
size=0; 

form.onsubmit = delayedSubmit; 

function delayedSubmit() { 
    if (++size < 5) { 
     alert("Counting "+size);  
     setTimeout(delayedSubmit,1000); 
     return false; 
    } 
    alert("Form submitted"); 
    form.submit(); 
} 

和 - 当然 - 删除(或更改)的ID名称从提交按钮,如:

<input type="submit" value="Upload" /> 

如:http://jsbin.com/equyit/1/edit

+0

另一个问题,我看到如果我一次返回false,输入值会丢失,我该如何避免这种情况? – southpaw93

+1

@CioroianuDenis它必须是别的东西。当表单被提交时,输入被“读取”,所以 - 在上面的例子中 - 值应该被正确地发送。 “回报错误”无关紧要。 – tborychowski