2010-08-10 117 views
1

我有这样一段代码在这里:在表单提交之前等待3秒钟JavaScript的

function checkAmount() 
{ 
    var PayField = document.getElementById('paymentamount'); 
    var Pound = document.getElementById('pound'); 

    if (PayField.value == "") 
    { 
     PayField.style.border = '1px #F00 solid'; 
     Pound.style.color = '#F00'; 
     alert('You need to enter an amount that you wish to donate'); 

     return false; 
    } 
    return true; 
} 

当用户键入一个有效量和点击支付按钮,形式应等待3秒,然后等待在3秒后提交。

我试过用setTimeout(),但它根本不起作用。我不想用这个jQuery,你能给我一个代码怎么做。

干杯。

回答

3

添加ID到您的窗体:

<form id="whatever"> 

然后,在你的JavaScript:

var waited = false; 
function checkAmount() 
{ 
    var PayField = document.getElementById('paymentamount'); 
    var Pound = document.getElementById('pound'); 

    if (PayField.value == "") 
    { 
     PayField.style.border = '1px #F00 solid'; 
     Pound.style.color = '#F00'; 
     alert('You need to enter an amount that you wish to donate'); 

     return false; 
    } 
    if (waited) 
    { 
     return true; 
    } 
    waited = true; 
    setTimeout(function() { document.getElementById('whatever').submit() }, 3000); 
    return false; 
} 
+2

您不应该将'string'传递给setTimeout函数。将它传递给一个函数(命名或匿名)。检查我的答案。另外一个技巧,你可以给函数本身赋值'waited'属性,你不必创建'waited'全局变量。 – SolutionYogi 2010-08-10 01:30:27

+0

忘记了。旧习惯等 – Zarel 2010-08-10 01:43:09

2

工作演示:http://jsbin.com/ifola4/2

比方说,你的形式有 'donationForm'

ID
<form id='donationForm' onsubmit='return checkAmount();'> 

function checkAmount() 
    { 
     if(checkAmount.validated) 
     return true; 

     checkAmount.validated = false; //we will assign the property to the function itself. 
     var PayField = document.getElementById('paymentamount'); 
     var Pound = document.getElementById('pound'); 

     if (PayField.value == "") 
     { 
      PayField.style.border = '1px #F00 solid'; 
      Pound.style.color = '#F00'; 
      alert('You need to enter an amount that you wish to donate'); 

      return false; 
     } 

     setTimeout(function() 
      { 
      checkAmount.validated = true; 
         document.getElementById('donationForm').submit(); 
        }, 3000); 
     return false; 
    } 
+1

+1对于**不**通过传递一个字符串作为第一个参数来调用具有'setTimeout()'的'eval()'。 – alex 2010-08-10 01:38:54