2013-04-16 90 views
0

我有一個網頁,裏面有一堆div元素。該頁面在連接到非常慢的機頂盒的電視機上運行。該框運行嵌入式Opera瀏覽器版本9.50。我唯一的輸入設備是STB的遙控器,沒有鼠標!在這個網頁(在電視上),由於沒有鼠標,用戶使用遙控器上的上/下/左/右箭頭鍵從一個格轉到另一格。現在,當有人快速按下這些按鍵時,我正試圖「剔除」這些按鍵!我可以控制按鍵事件,但是我沒有防止焦點事件的運氣,無論如何,無論我在按鍵處理程序中做什麼,似乎都會被解僱。點擊預防焦點事件

問題是:如何防止焦點轉到當前元素的按鍵處理程序中的另一個元素?調用keypress event.preventDefault()並返回false(來自按鍵處理程序)不會阻止焦點轉移到下一個元素。換句話說,無論如何,事件「冒泡」。我怎樣才能防止呢? 我玩過改變tabIndex屬性,但它沒用。

任何想法。謝謝。

+0

你試過'event.stopImmediatePropagation()'處理程序內? –

+2

顯示一些代碼。 – isherwood

+0

什麼是按鍵事件?也許他們可以通過調用元素上的'.focus()'來代替瀏覽器試圖做的事情? – nullability

回答

1

如果要防止單擊事件引發焦點,必須從mousedown處理程序中刪除e.preventDefault()。無法從click處理程序做到這一點,因爲這不是一個物理事件,這只是mousedownmouseup

如果你想防止標籤更改焦點的抽象,你從的keydown的處理程序必須e.preventDefault()。不能從keypress開始,因爲keypress不是物理事件,它是​​和keyup事件的抽象(注意按下按鍵時多次觸發按鍵)。

http://jsfiddle.net/gtwhF/

$('#a').on('mousedown', function(e) { 
    e.preventDefault(); 
}) 

$('#a').on('keydown', function(e) { 
    if (e.keyCode == 9) { 
     e.preventDefault(); 
    } 
}) 
+0

感謝Juan,但它在Opera中不起作用。請參閱日誌片段:04/16/2013 13:51:37.319信息:RemoteControl:OnKeyDown:防止Debouncer:divMoreCategoriesButton上的keyCode = 65521 04/16/2013 13:51:37.335信息:RemoteControl:OnKeyPress:keyCode = 65521 srcElementId = divMoreCategoriesButton – user2287793

+0

注意,即使keyDown處理程序阻止了keyCode 65521,仍然調用keyPress處理程序! – user2287793