簡體   English   中英

使用 DOM Level 3 Listeners 禁用退格鍵

[英]Disable backspace with DOM Level 3 Listeners

我正在制作一個用戶必須能夠輸入的頁面。 退格鍵的默認 function 是 go 返回一個頁面,但是我需要防止這種情況並將我自己的 function 分配給它。

問題實際上是防止退格。 我可以捕獲它,但我無法阻止它。 我正在使用 3 級事件偵聽器。 event.preventDefault()對我不起作用,也沒有返回 false。

我也試過這個:

function onunload(e) {
    if (e.keyCode == 37) return false;
    return true;
}

<body onunload="return false;">

但是第一個基本上是

return confirm("false");

第二個什么都不做?

AFAIR,可以通過僅在 Firefox 的keypress中返回 false 來阻止默認的瀏覽器快捷方式操作(我測試的最后一個版本是 3.x)。

beforeunloadunload是特定事件,應在其處理程序中返回字符串。 出於安全原因,瀏覽器可能只顯示帶有提供消息(該字符串)的確認對話框。 此外,Firefox 自版本 4 以來甚至忽略該字符串並始終顯示標准消息。

沒有辦法默默地阻止用戶離開頁面。

順便說一句,退格鍵在 Ubuntu 中不能用作 history.back()。

document級別使用keydown處理程序:

document.onkeydown = function(e){
 if (e.keyCode===8) {
   return false;
 }
};

完全阻止退格鍵可能不是一個好主意,假設您打錯了字並想在文本框中修復它! 因此,只有當有人沒有輸入文本時,您才需要禁用退格鍵!

這可能適用於所有主流瀏覽器:

document.onkeydown = function (e) {
    e = e || window.event;
    if (e.keyCode == 8) {                                           // Disable Backspace
        var el = document.activeElement;
        if (!((el.nodeName == "INPUT" && (el.type == "text" || el.type == "password")) || el.nodeName == "TEXTAREA")) {
            e.preventDefault();
            e.stopPropagation();
            return false;
        }
    }
};

DOM3 事件 model 規范具有向后兼容性,所以我認為這可能不是問題,但這是上述代碼的 DOM3 修改版本:

function KeyDownHandler(e) {
    if (e.keyCode == 8) {                                           // Disable Backspace
        var el = document.activeElement;
        if (!((el.nodeName == "INPUT" && (el.type == "text" || el.type == "password")) || el.nodeName == "TEXTAREA")) {
            e.preventDefault();
            e.stopPropagation();
        }
    }
};

if (document.attachEvent) document.attachEvent("onkeydown", KeyDownHandler);
else document.addEventListener("keydown", KeyDownHandler);

像上面那樣的 DOM3 事件注冊可能會很痛苦, John Resig對此有很好的實現,但是您可以使用標准的跨瀏覽器庫,如 JQuery,它在所有主流瀏覽器中都可以正常工作!

暫無
暫無

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

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