簡體   English   中英

防止默認事件操作不起作用......?

[英]Prevent default event action not working…?

我正在嘗試在我的網站上添加鍵盤快捷鍵,以便使用鍵盤實現快速導航。 但是,我嘗試使用Alt + X快捷方式遇到了一個小問題。 該事件運行得很好並且應該返回false ,但瀏覽器的File菜單無論如何都會出現。 我也嘗試過preventDefault方法,但沒有改變。

該腳本的簡化版本是:

document.documentElement.onkeydown = function(e) {
    e = e || window.event;
    switch( e.keyCode || e.which) {
        // some cases here - most notably:
        case 116: // F5 key
            if( activeFrame) {
                activeFrame.contentWindow.location.reload();
                // reloads an iframe if one is active
                return false;
            }
            break;
        // more cases...
        case 88: // X key
            if( e.altKey) {
                // do something
                return false;
            }
    }
}

如上所述,覆蓋F5鍵的默認操作可以正常工作 - 只有在沒有iframe處於活動狀態時,瀏覽器才會重新加載頁面。 我不太清楚如何在按下Alt + X時阻止顯示菜單。

使用stopPropagation(e); 而不是preventDefault方法

function stopPropagation(e)
{
    e = e || event;/* get IE event ( not passed ) */
    e.stopPropagation? e.stopPropagation() : e.cancelBubble = true;
}

參考鏈接

另一個SO問題,提到preventDefault在IE中有問題。

UPDATE

根據MSDN參考,嘗試使用以下代碼

event.returnValue=false;

還有一點來自於檢測擊鍵

一些一般性的警告:

  • 通常,Mac不如Windows可靠,並且無法檢測到某些密鑰。
  • 資源管理器不會為delete,end,enter,escape,功能鍵,home,insert,pageUp / Down和tab激活按鍵事件。
  • Onkeypress,Safari為刪除,結束,功能鍵,home和pageUp.Down提供63200范圍內的奇怪keyCode值。 onkeydown和-up值是正常的。
  • 除了Opera之外,在Mac上無法檢測到Alt,Cmd,Ctrl和Shift。 但是,您始終可以使用altKey,ctrlKey和shiftKey屬性。

我實際上有一個網絡應用程序與CTRL快捷鍵工作正常,但后來決定我是聰明的並使用accesskey屬性,並遇到IE的這個問題。

轉到CTRL快捷鍵的問題在於許多應用程序中的許多應用程序更加標准/有用(例如:剪切,復制,粘貼,全選)。

Ctrl + Alt相當安全,但需要用戶更多的工作。

我傾向於只是試圖堅持ALT快捷方式IE並不是固執地堅持處理。

CTRL + A / CTRL + F演示成功取消: http//jsfiddle.net/egJyT/

這個答案似乎意味着,如果不將IE放入kiosk模式,就無法禁用菜單快捷方式。

請注意,如果您設法成功阻止瀏覽器檢測到組合鍵,則可能會使某些用戶無法使用該頁面。 許多屏幕閱讀器幾乎保留了您可以想到的任何鍵來控制屏幕閱讀器,如果您在添加快捷鍵代碼之前使用屏幕閱讀器訪問您的頁面,則在添加快捷鍵代碼后,可能是完全無法訪問的用戶需要屏幕閱讀器。

閱讀本文關於訪問密鑰 (有點舊但可能仍然相關),以及關於預留鍵擊組合的文章,然后再花費太多時間來解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM