2014-01-09 11 views
0

這個小型的JavaScript頁面包含A標籤,通過使用左右箭頭可以點擊或訪問這些標籤。在這兩種情況下都應該調用相同的函數。目前的解決方案是把重點()上向左或向右箭頭,並調用相同功能onmousedown事件的onfocus在javascript中打斷一連串事件

function tab(e) {  //incomplete, just for illustration purposes 
    var as = document.getElementById("areas"); 
    if (e.keyCode === 37 || e.keyCode === 39) { 
    as.firstChild.focus(); 
    ... 
} 

... 
a.onmousedown = mousedown; 
a.onfocus = mousedown; 

這具有這樣的不方便的點擊的標籤也將關注它,並該函數將被調用兩次。

function mousedown(e) { 
    if (Date.now() - lastEvent < 100) { 
    return;          
    } 
    else { 
    lastEvent = Date.now(); 
    } 
    ... 

這是目前的解決方案:從mouseDown()調用的時代記住毫秒,如果另一個呼叫到達小於100ms以後,它必須是相同的用戶點擊時onmousedown事件和聚焦狀態的連續。

有沒有更好的解決方案? e.cancelbubble = true;將不起作用,因爲這是兩個不同的事件。有沒有辦法阻止整個事件鏈?我覺得單線程會比這次更優雅 - 記住黑客。

謝謝。

+0

*「'e.cancelbubble = true;'不起作用,因爲這是兩個不同的事件。」*而且​​它僅僅是IE瀏覽器。 –

回答

0

您目前的解決方案可能是最好的。在工程設計中,這被稱爲「反彈」輸入(該術語來自物理開關按下時「物理開關」的觸點的「電氣和機械的」bouncing)。

預防的mousedown事件的默認操作可以防止focus事件,但我認爲這將是可能有不愉快的副作用,而當前的解決方案是很好的遏制。