2012-01-17 20 views
11

私は、ページが読み込まれて5秒後に提出しようとしているフォームを持っています。私はsetTimeoutを試しましたが、それは動作していません..ケースになり、私は、サイト上のjQueryを持っていますが、作業)(遅延を得るcouldntのいずれか5秒後に自動提出フォーム

<form action="" name="cartCheckout" id="cartCheckout" method="post"> 
<input type="hidden" name="action" value="checkout" /> 
<input type="hidden" name="save" value="1" /> 
<input type="hidden" name="orderID" value="<?php echo $GLOBALS['CHECKOUT_ORDERID']; ?>" /> 

<div class="itembox" id="step4box"> 
    <div id="progress"> 
     <ul> 
     <li>Your Cart</li> 
     <li>Your Details</li> 
     <li class="current">Payment</li> 
     <li>Confirmation</li> 
     </ul> 
    </div> 
<div id="words" class="gothbold">Please wait while we we redirect you to<br />Paypal for a secure payment method.</div> 

<a class="redirect" href="javascript:void(0)" title="Proceed to Paypal" onClick="document.cartCheckout.submit();"><span>If you aren't redirected in 5 seconds click here</span></a><br /> 

<a class="cancel" href="javascript:void(0)" title="Return to details" onClick="jQuery('#step4box').hide();jQuery('#step2box').show();"><span>Cancel</span></a>  
</div> 
<script type="text/javascript"> 
    window.onload=function(){ 
     window.setTimeout(document.cartCheckout.submit(), 5000); 
    }; 
</script> 
</form>  
は、任意の助けをいただければ幸いです

、事前のおかげで

はEDIT:

が経由してこれに変更@Alex、@ user824294とこの質問の組み合わせ: How Can I create A 5 second Countdown timer with jquery that ends with a login popup?。今すぐカウントダウンの偉大な機能と素晴らしい仕事。みんなありがとう!

window.onload=function(){ 
    var counter = 5; 
    var interval = setInterval(function() { 
     counter--; 
     $("#seconds").text(counter); 
     if (counter == 0) { 
      redirect(); 
      clearInterval(interval); 
     } 
    }, 1000); 

}; 

function redirect() { 
    document.checkout_paypal.submit(); 
} 

答えて

10

代わりに関数への参照を渡します。

window.onload=function(){ 
    window.setTimeout(document.cartCheckout.submit.bind(document.cartCheckout), 5000); 
}; 

...か...

window.onload=function(){ 
    window.setTimeout(function() { document.cartCheckout.submit(); }, 5000); 
}; 

あなたは現在の関数を実行し、その後setTimeout()にその戻り値を渡しています。

さらに正確に5秒間実行したい場合は、setInterval()または再帰的setTimeout()になり、+new Dateを調べる必要があります。

+0

これは動作しません! submit submit関数が間違った 'this'で呼び出されました。 http://jsfiddle.net/C8FcX/ Chrome出力:「不正な呼び出し」。正しいコンテキストでサブミットが呼び出されるようにするには 'function(){...}'でラップする必要があります。あるいは、Function.bindを使用することができます。 –

+0

@JuanMendes:そうかもしれないと思いました。 – alex

1

代わりにこれをやって試してみてください:あなたは、それは本当に簡単なことができます

window.onload=function(){ 
    window.setTimeout("redirect()", 5000); 
    // OR 
    window.setTimeout(function() { redirect(); }, 5000); 
}; 

function redirect() { 
    document.cartCheckout.submit(); 
} 
5

を、この男を試してみてください。

<form name="xyz"...> 
... 
<script type="text/javascript"> 
<!-- 
    var wait=setTimeout("document.xyz.submit();",5000); 
//--> 
</script> 
</form> 
+0

こんにちは、StackOverflowに貢献してくれてありがとう。あなたが答えている質問は古くてすでに答えられています。もしあなたがもっと厳しい質問にも努力できるなら、私たちはうれしいでしょう。 – Mifeet

+0

また、あなたのソリューションはすべてのブラウザで機能しません - [この質問](http://stackoverflow.com/questions/859806/does-javascript-in-the-html-body-execute-when-encountered) – Mifeet

関連する問題