2

我有 html-link,我想将事件侦听器添加到<a>标签,所以调用 javascript 函数,然后 brouser 打开一个链接。我尝试使用document.getElementById('link').addEventListener("click", myfunc);,但它工作混乱,有时会调用 myfunc,打开链接后,有时会打开链接,所以不调用 myfunc。如何设置这些事件的顺序?

代码路径:

HTML:

<a href="<%= Url.Action("LogOut", "Account") %>" id="logoutlink">LogOut</a>

Javascript:

function LogOutWithoutReload(e) {
VK.Auth.logout(function () { });}

document.getElementById('logoutlink').addEventListener("click", LogOutWithoutReload);

4

4 回答 4

3

你的函数在做什么?这是某种异步事件吗?如果是这样,那么您需要在异步任务的成功回调中执行默认操作。

.loadjQuery函数就是一个例子。

如果您的mufunc函数要调用 jQueryload函数,它会立即返回,它不会等待它自己的数据被加载。您必须做的是使用load函数中的第二个参数作为数据加载完成时的回调。这是您对链接进行默认操作的地方。

这可能是您在使用其他一些异步任务时遇到的问题。

在你编辑你的代码后,你有这一行

VK.Auth.logout(function () { });

这看起来像注销函数确实是某种异步调用并且具有回调函数。我可能是错的,它可能正在做你需要检查文档的其他事情,但对我来说,你应该在回调函数中做任何你需要做的事情(例如重定向)。

于 2012-07-16T12:25:48.570 回答
0

事件处理程序总是在浏览器离开之前被调用。我的猜测是您的功能有时不起作用,导致异常并且不会停止默认操作。你试过调试它吗?您的(错误)控制台中应该有一些消息。

于 2012-07-16T12:26:56.577 回答
0

执行脚本后设置链接的 href 属性。

链接

<a href='#'>LogOut</a>

编码

document.getElementById("link").onclick = function(event) {
   //your script here, if there is an ajax request,
   // change location in your callback function
   location.href = '<%= Url.Action("LogOut", "Account") %>'
}
于 2012-07-16T12:38:22.957 回答
-2

要防止打开链接,请尝试:

 document.getElementById("link").onclick = function(event) {
    event.preventDefault();
    myFunc();
 }
于 2012-07-16T12:27:10.610 回答