JavaScript Click事件通过Enter键触发,但不通过鼠标触发

时间:2014-01-30 02:37:07

标签: javascript events dom

如下所示的某些代码通过 Enter 键触发click事件,但没有响应鼠标单击。

//a is an anchor element
a.addEventListener('click', function (e)
{
    //Do Stuff...
});

This page演示了这个问题。相关的代码位于第176行。这正处于开发阶段,目前只有(有点)适用于 Chrome

此外,我刚刚验证了它是否有效,如果我使用mousedown,所以不仅仅是一个不可见元素位于锚点前面。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

编辑:现在您已经向我们展示了您正在使用的实际代码,问题与autoSuggest()函数具有自己的单击处理程序这一事实有关,并且在该单击处理程序中,它正在清除容器,它删除容器中的所有<a>元素,以便链接对象被销毁(可能在您的click事件开始处理之前)。因此,您可以获取在单击之前发生的事件(如mousedown),但在单击之后,该元素将从DOM中删除。

如果您告诉我们在单击自动建议项目时您尝试实际执行的操作与autoSuggest()函数的默认行为不同,并且您指向该函数的任何文档,那么也许我们可以提供更好的方法来解决您的问题。


链接可能会触发并将您带到新页面(或重新加载当前页面),从而阻止您看到点击代码运行。通常,当您在link元素上处理click事件时,您需要阻止默认行为:

//a is an anchor element
a.addEventListener('click', function (e) {
    e.preventDefault();
    //Do Stuff...
});

另一种可能性是,您尝试在加载DOM之前或创建此特定链接之前过早安装事件处理程序,因此没有实际的单击事件处理程序附加到DOM对象。您可以通过在事件处理程序中临时放置alert("Click handler called");并查看是否弹出来验证事件处理程序是否被调用。