9

ページをロードし、クリック時に JavaScript 関数を呼び出すリンクがあります。問題は、ページがリダイレクトされる前に JavaScript 関数が終了できないことです。それが確実に行われる方法はありますか?

alert()JavaScript 関数でコメント アウトされていることに気付くでしょう。コメントを外すと、関数は完了することができます。ただし、アラートポップアップが実際に発生することは明らかに望んでいません。

ここにリンクがあります:

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

時間内に終了できない JavaScript 関数は次のとおりです。

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

1 に答える 1

13

onclick関数の結果を返すように を変更してみてください。

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

または、明示的に false を返します。

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

関数が を返すfalseと、どちらの方法でもデフォルトのイベント動作が停止します。つまり、リンクのナビゲートがまったく停止します。次に、関数内にコードを追加して、Ajax の終了後にナビゲーションを実行できます。

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

    return false;    
}

理想的には、特に に jQuery を使用しているように見えるので$.get()、インラインの onclick を削除して、次のようにします。

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;
});
于 2012-05-23T02:04:41.703 に答える