如何在javascript中设置事件顺序?

如何在javascript中设置事件顺序?,javascript,events,hyperlink,click,Javascript,Events,Hyperlink,Click,我有一个html链接,我想把事件监听器添加到标记中,所以调用javascript函数,然后brouser打开一个链接。我尝试使用document.getElementById('link').addEventListener(“单击”,myfunc),但它工作混乱,有时会调用myfunc,打开链接后,有时会打开链接,所以不会调用myfunc。如何设置这些事件的顺序 代码路径: HTML: <a href="<%= Url.Action("LogOut", "Account") %&g

我有一个html链接,我想把事件监听器添加到
标记中,所以调用javascript函数,然后brouser打开一个链接。我尝试使用
document.getElementById('link').addEventListener(“单击”,myfunc),但它工作混乱,有时会调用myfunc,打开链接后,有时会打开链接,所以不会调用myfunc。如何设置这些事件的顺序

代码路径:

HTML:

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

document.getElementById('logoutlink').addEventListener(“单击”,注销而不重新加载)

您的函数在做什么?这是一件不寻常的事情吗?如果是这样,则需要在异步任务的成功回调中执行默认操作

jQuery
.load
函数就是一个例子

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

这可能是您在执行其他异步任务时遇到的问题

编辑代码后,您有这一行

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

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

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

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

 document.getElementById("link").onclick = function(event) {
    event.preventDefault();
    myFunc();
 }

在脚本执行后设置链接的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") %>'
}
document.getElementById(“链接”).onclick=函数(事件){
//这里的脚本,如果有ajax请求,
//更改回调函数中的位置
location.href=''
}

这不应该发生。事件处理程序应始终在链接的默认操作发生之前调用。我们无法仅使用这些信息调试此代码。请你做一个“工作”的例子好吗?但正如我经常看到的那样。@user1495756好吧,你必须发布一些代码让我们看看,因为这根本不是网络浏览器的工作方式。我在网站上有授权,用户可以授权使用社交网络。我有代码,它结合了两种类型的授权,不会产生冲突。我只能使用js从社交网络中取消授权,所以我想在注销链接中添加点击处理程序。他不想阻止它,他想确保它总是第二个被触发。你的意思是,它不起作用?在VK.Auth.logout的回调中或调用之前,你在哪里有这个警报?嗯,是的,我确实有一些想法来解决它,在代码中使用重定向,但我认为这个想法是它的最佳实现。。非常感谢。
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") %>'
}