2014-01-30 121 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'函數,並且可以發誓我之前用過類似的方法。 –