2012-05-23 10 views
8

Tengo un enlace que carga una página y llama a una función javascript al hacer clic. El problema es que la función javascript no puede finalizar antes de que la página redireccione. ¿Hay alguna forma de asegurar que lo haga?El enlace redirige la página antes de que la función javascript onclick pueda terminar

Notarás que hay un alert() que está comentado en la función javascript, y si lo elimino, la función puede completarse. Sin embargo, obviamente no quiero que aparezca una ventana emergente de alerta.

Aquí es el vínculo:

<a href="p.php?p=$randString&s=$postCat" onclick="setYSession();"> 

Aquí es la función javascript que no puede terminar en el tiempo:

function setYSession() { 
    var YposValue = window.pageYOffset; 
    $.get('yPosSession.php?yValue=' + YposValue); 
    //alert(YposValue); 
    return false; 
} 
+0

ninguna razón particular por la que le gustaría evitar el uso de '.open' ..? –

+0

Intenté usarlo en mi dispositivo Android y cuando hice clic atrás me estaba dando problemas ... básicamente estaba retrocediendo 2 páginas en lugar de 1 por algún motivo. – user1399694

+0

hm ok, ¿está enterado de esto: http://stackoverflow.com/questions/1865837/whats-the-difference-between-window-location-and-window-location-replace? –

Respuesta

13

Intente cambiar el onclick para devolver el resultado de su función:

echo "<a href='p.php?p=$randString&s=$postCat' onclick='return setYSession();'>"; 

O explícitamente devolver falso:

echo "<a href='p.php?p=$randString&s=$postCat' onclick='setYSession();return false'>"; 

Dado que su función devuelve false, de cualquier forma se detendrá el comportamiento predeterminado del evento, es decir, se detendrá el enlace navegando. Luego, dentro de su función puede agregar código para hacer la navegación después de su Ajax termina:

function setYSession() {  
    var YposValue = window.pageYOffset; 
    $.get('yPosSession.php?yValue=' + YposValue, function() { 
     window.location.href = 'p.php?p=$randString&s=$postCat'; 
    }); 

    return false;  
} 

Idealmente, sobre todo porque parece que estás usando jQuery para la $.get(), me quito la línea onclick y hacer algo como esto :

echo "<a href='p.php?p=$randString&s=$postCat' id='myLink'>"; 

$("#myLink").click(function() { 
    var YposValue = window.pageYOffset, 
     myHref = this.href; 
    $.get('yPosSession.php?yValue=' + YposValue, function() { 
     window.location.href = myHref; 
    }); 

    return false; 
}); 
+0

Fuimos con su 2da hasta la última recomendación y funciona como un encanto! – user1399694

+0

Después de implementar comportamientos como este, puede quedarse atascado con el mismo problema que yo: su control + clic no funcionará. Estás incumpliendo el comportamiento estándar del navegador, y lo lamentarás más adelante. – Spork

-1
<script> 
function a() 
{ 
    setYSession(); 
    window.location.href = "p.php?p=$randString&s=$postCat"; 

    return false; 
} 
</script> 

... 

<a href='javascript: void(0);' onclick='a();'>click me</a> 
Cuestiones relacionadas