2012-05-23 9 views
8

Ho un collegamento che carica una pagina e chiama una funzione javascript al clic. Il problema è che la funzione javascript non può finire prima che i reindirizzamenti della pagina. Esiste comunque per assicurarlo?Link reindirizza la pagina prima che javascript onclick sia in grado di terminare

Si noterà che c'è un alert() che viene commentato nella funzione javascript e, se annullo, la funzione è in grado di completare. Tuttavia, ovviamente non voglio che un popup di avviso si svolga effettivamente.

Ecco il link:

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

Qui è la funzione javascript che non può finire in tempo:

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

alcuna ragione particolare per cui si desidera evitare l'uso di '.open' ..? –

+0

Ho provato ad usarlo sul mio dispositivo Android e quando ho fatto clic su di esso mi davano problemi ... in pratica si trattava di tornare indietro di 2 pagine anziché 1 per qualche motivo. – user1399694

+0

ok, sei a conoscenza di questo: http://stackoverflow.com/questions/1865837/whats-the-difference-traving-window-location-and-window-location-replace? –

risposta

13

Provare a cambiare il onclick di restituire il risultato della funzione:

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

Oppure restituire in modo esplicito falso:

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

Dato che la funzione restituisce false, in entrambi i casi si interrompe il comportamento dell'evento predefinito, vale a dire, si interrompe il collegamento a tutti. Poi all'interno della vostra funzione è possibile aggiungere codice per fare la navigazione dopo finisce la tua Ajax:

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

    return false;  
} 

Idealmente, soprattutto perché ti sembra di essere utilizzando jQuery per il $.get(), mi tolgo la linea onclick e fare qualcosa di simile :

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

Sono andato con il 2 ° all'ultimo consiglio e funziona come un fascino! – user1399694

+0

Dopo aver implementato comportamenti come questo, potresti rimanere bloccato con lo stesso problema che ho fatto: il tuo controllo + clic non funzionerà. Stai rompendo il comportamento standard del browser e te ne pentirai più tardi. – 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> 
Problemi correlati