2014-01-30 75 views
0

一些类似于以下代码的代码是通过Enter键触发click事件,但没有响应鼠标单击。JavaScript Click事件通过Enter键触发,但不通过鼠标触发

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

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

此外,我只是验证它,如果我使用mousedown,所以它不只是一个隐形元素坐在锚前的情况。

任何想法?

+1

这个问题没有告诉我们你的代码。你可以发布一个演示失败的地方吗? – elclanrs

+1

更多的代码会有所帮助。但也许有一个不可见的元素阻止实际被点击的锚标记? – maxedison

+0

@elclanrs et。人。 - 演示发布。 –

回答

1

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

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


该链接可以被解雇,并采取关闭你到一个新的页面(或重新加载当前页面),从而阻止您看到的点击代码运行。通常当你处理一个链接元素上的click事件,你需要防止的默认行为:

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

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

+0

谢谢。我已经调用过'e.preventDefault()'。我只是编辑我的问题,包括链接到一个页面,显示问题。 –

+1

@RodrickChapman - 看看我已经添加到我的答案的开始。 – jfriend00

+0

非常感谢。我实际上编写了'autosuggest'函数,并且可以发誓我之前用过类似的方法。 –