2012-01-17 17 views
11

Tengo un formulario que intento enviar después de que la página se cargue y pasaron 5 segundos .. He intentado con setTimeout pero parece que no funciona ... ¿Alguien puede sugerir por qué esto ser el caso, tengo jQuery en el sitio, pero no podía conseguir retardo() que trabajan ya seaEnvío automático del formulario después de 5 segundos

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

cualquier ayuda sería muy apreciada, gracias de antemano

EDIT:

cambiaron a este a través de una combinación de @Alex, @ user824294 y esta pregunta: How Can I create A 5 second Countdown timer with jquery that ends with a login popup?. Ahora funciona de maravilla y con una gran funcionalidad de cuenta atrás. ¡Gracias chicos!

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

Respuesta

10

Pase una referencia a la función en su lugar.

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

... o ...

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

En este momento está ejecutando la función, y luego pasar a su valor de retorno setTimeout().

Además, si desea ejecutar más cerca de exactamente 5 segundos, necesitaría un setInterval() o recursivo setTimeout() y examinar +new Date.

+0

Esto no funciona! La función de envío de envío se llama con el 'this' incorrecto. http://jsfiddle.net/C8FcX/ Resultados de Chrome: 'Invocación ilegal'. Necesita envolverlo con una función '() {...}' para asegurarse de que se envíe con el contexto correcto, o puede usar 'Function.bind' –

+0

@JuanMendes: Pensé que ese podría haber sido el caso. – alex

1

trate de hacer esto en su lugar:

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

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

lo puedes tener realmente simple, tratar estos chicos:

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

Hola, gracias por tu contribución a StackOverflow. La pregunta que está respondiendo es antigua y ya respondida; nos alegraremos si puede dedicar su esfuerzo a preguntas más urgentes también. – Mifeet

+0

Además, su solución no funciona en todos los navegadores - vea [esta pregunta] (http://stackoverflow.com/questions/859806/does-javascript-in-the-html-body-execute-when-encountered) – Mifeet

Cuestiones relacionadas