2014-03-03 59 views
0

我有一個可以觸發「stopstart」函數(動畫)的按鈕。我也想要一個無鼠標方法來做到這一點,所以我已經將相同的功能綁定到空格鍵。這工作。如何防止焦點在按鈕上時觸發「點擊」事件的「按鍵」事件 - javascript/html dom

然而如果重點是按鈕,我按空間 - 這兩個事件火,無法工作,如何制止這種(第一按鍵事件觸發 - 鉻..)

事件監聽代碼:

document.getElementById("stopstart").addEventListener("click", 
     function (event) { 
      stopstart(); 
     }); //add event listener to "stopstart" button 

document.addEventListener("keypress", 
     function (event) { 
      if (event.keyCode === 32) { //space key 
       stopstart(); 
      } 
     }); //add spacekey event listener to document 

我不想從按鈕移除焦點,因爲我想保留這些功能 - 這兩個事件似乎是單獨生成 - 所以我還沒有找到如何檢測到點擊事件實際上是由空格鍵生成的。

這是可以解決的使用,而無需添加臨時標誌抓住這等

+0

但問題是因爲點擊代碼被觸發,你爲什麼需要兩個他按鍵,當點擊只會做工精細的點擊?似乎您需要解決某個已經與一個事件偵聽器一起工作的東西。 – epascarello

+0

請適應這個小提琴來重現問題http://jsfiddle.net/4srzb/ –

+0

我更新了小提琴以顯示問題:http://jsfiddle.net/4srzb/1/ –

回答

1

的點擊位置的關鍵事件是零,零,所以你可以查找。

document.getElementById("stopstart").addEventListener("click", 
    function (event) { 
     var x = event.x || event.clientX; 
     var y = event.y || event.clientY; 
     if (!x && !y) { 
      alert("key press"); 
      return false; 
     } 
     stopstart(); 
    }); 

http://jsfiddle.net/mScEC/

+0

看不出有什麼辦法來說明兩者之間的區別,所以我認爲這是唯一的出路,而且誤報的機會很小 –

相關問題