2012-01-17 40 views
11

Tôi có biểu mẫu mà tôi đang cố gắng gửi sau khi tải trang và 5 giây đã trôi qua .. tôi đã thử setTimeout nhưng có vẻ như không hoạt động .. bất kỳ ai cũng có thể đề xuất lý do tại sao là trường hợp, tôi sẽ sử dụng jQuery trên trang web nhưng couldnt nhận chậm trễ() ngày làm việc hoặcTự động gửi biểu mẫu sau 5 giây

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

bất kỳ trợ giúp sẽ được đánh giá rất nhiều, cảm ơn trước

EDIT:

đổi này thông qua một sự kết hợp của @Alex, @ user824294 và câu hỏi này: How Can I create A 5 second Countdown timer with jquery that ends with a login popup?. Bây giờ làm việc tuyệt vời và với chức năng tuyệt vời của đếm ngược. Cảm ơn các bạn!

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(); 
} 

Trả lời

10

Chuyển tham chiếu đến hàm thay thế.

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

... hoặc ...

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

Bạn đang thực hiện các chức năng, và sau đó đi qua giá trị trả về của nó để setTimeout().

Ngoài ra, nếu bạn muốn thực hiện gần đúng hơn 5 giây, bạn cần phải setInterval() hoặc đệ quy setTimeout() và kiểm tra +new Date.

+0

này không hoạt động! Hàm submit submit được gọi sai 'this'. http://jsfiddle.net/C8FcX/ Kết quả đầu ra của Chrome: 'Lệnh gọi bất hợp pháp'. Bạn cần phải bọc nó với một 'hàm() {...}' để đảm bảo rằng việc gửi được gọi với ngữ cảnh chính xác, hoặc bạn có thể sử dụng 'Function.bind' –

+0

@JuanMendes: Tôi nghĩ rằng đó có thể là trường hợp. – alex

1

Hãy thử làm điều này thay vì:

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

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

Bạn có thể có nó thực sự đơn giản, hãy thử kẻ này:

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

Xin chào, cảm ơn bạn đã đóng góp cho StackOverflow. Câu hỏi mà bạn đang trả lời là cũ và đã được trả lời - chúng tôi sẽ rất vui nếu bạn có thể nỗ lực nhiều hơn cho các câu hỏi cấp bách. – Mifeet

+0

Ngoài ra, giải pháp của bạn không hoạt động trong tất cả các trình duyệt - xem [câu hỏi này] (http://stackoverflow.com/questions/859806/does-javascript-in-the-html-body-execute-when-encountered) – Mifeet

Các vấn đề liên quan