2012-05-23 12 views
8

Mam łącze, które ładuje stronę i wywołuje funkcję javascript na kliknięcie. Problem polega na tym, że funkcja javascript nie może zakończyć się przed przekierowaniem strony. Czy mimo to jest to możliwe?Link przekierowuje stronę, zanim funkcja javascript onclick może zakończyć się

Zauważysz, że istnieje alert(), który jest zakomentowany w funkcji javascript, a jeśli odkomentuję ją, funkcja będzie w stanie ukończyć. Jednak oczywiście nie chcę, aby alarmowe wyskakujące okienko rzeczywiście miało miejsce.

Oto link:

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

Oto funkcja javascript, że nie można zakończyć w czasie:

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

jakiś szczególny powód, dla którego chcesz unikać '.open' ..? –

+0

Próbowałem go używać na moim urządzeniu z Androidem i kiedy kliknąłem z powrotem to dawało mi problemy ... w zasadzie cofało się 2 strony zamiast 1 z jakiegoś powodu. – user1399694

+0

hm ok, czy wiesz o tym: http://stackoverflow.com/questions/1865837/whats-the-difference-between-window-location-and-window-location-replace? –

Odpowiedz

13

Spróbuj zmienić onclick aby powrócić wyniku swojej funkcji:

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

Lub jawnie zwrócić fałsz:

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

Ponieważ funkcja zwraca wartość false, w każdy sposób zatrzyma domyślne zachowanie zdarzenia, tzn. Przerwie w ogóle nawigowanie po łączu. Następnie w ciągu swojej funkcji można dodać kod, aby wykonać swoją nawigację po zakończeniu Ajax:

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

    return false;  
} 

Idealnie, zwłaszcza, że ​​wydaje się być przy użyciu jQuery dla $.get(), chciałbym usunąć inline onclick i zrobić coś takiego :

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

Poszedłem z drugą do ostatniej rekomendacji i działa jak urok! – user1399694

+0

Po zaimplementowaniu takich zachowań, możesz utknąć z tym samym problemem co ja: kontrola + kliknięcie nie będzie działać. Zrywasz standardowe zachowanie przeglądarki, a później będziesz tego żałować. – 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> 
Powiązane problemy