链接在JavaScript onclick函数完成之前重定向页面

9
我有一个链接,点击后会加载一个页面并调用一个JavaScript函数。问题在于JavaScript函数不能在页面重定向之前完成。有没有办法确保它完成呢?
你会注意到JavaScript函数中有一个被注释掉的alert(),如果我取消注释,函数就能够完成。但是,我显然不想让警报弹出。
这是链接:
<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;
}

你有什么特别的原因不想使用.open吗? - Andreas Wong
我尝试在我的安卓设备上使用它,当我点击返回时出现了问题...基本上它会回到两个页面而不是一个,原因不明。 - user1399694
嗯,你知道这个吗:https://dev59.com/uXI-5IYBdhLWcg3wbHm-? - Andreas Wong
我不是!谢谢提醒! - user1399694
1个回答

13
尝试将 onclick 改为返回函数的结果:

Try changing the onclick to return the result of your function:

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

我采纳了你倒数第二个建议,现在它完美地运行了! - user1399694
1
在实现这样的行为之后,你可能会遇到我遇到的同样问题:你的控制+单击不起作用。你正在打破标准浏览器行为,以后你会后悔的。 - Spork

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接