簡體   English   中英

Javascript 按鍵事件在 Firefox 中不起作用

[英]Javascript keypress event not functioning in Firefox

這是我的代碼:

function filter(obj,re) {
      if (obj&&obj.tagName.toLowerCase()=="input") {
        obj.filter=re;
        on(obj,"keypress",function(e) {
          if (e.keyCode<32) return true;
          if (!(String.fromCharCode(e.keyCode).match(this.filter))) {
            e.stopPropagation(); e.preventDefault(); return false;
          }
        });
      }
    }

filter(element,new RegExp('[\\w\\d]+'));

它在谷歌瀏覽器中運行良好,但在 Firefox 中不起作用。 發生的情況是我向 dom 元素添加了一個按鍵事件,該事件根據過濾器過濾掉數據。

無論如何,任何幫助將不勝感激。

更新

這是on函數:

function on(obj,evt,func) { 
   if (obj.addEventListener) obj.addEventListener(evt,func,false); 
   else obj.attachEvent("on"+evt,func); 
}

不推薦使用KeyboardEvent.keyCode屬性 - 在 Firefox 中,所有可打印字符的結果為零值,因此您的處理程序總是返回而不做任何事情。 charCode屬性在 Chrome 和 Firefox 中似乎仍然有效,但是您不應該依賴它,因為實際上所有字符代碼屬性都已棄用或非標准。

如 MDN 所述:

這不應該被新的 Web 應用程序使用。 IE 和 Firefox 已經(部分)支持 KeyboardEvent.key。 此外,Google Chrome 和 Safari 支持 KeyboardEvent.keyIdentifier,它在 DOM Level 3 Events 的舊草案中定義。 如果您可以使用它們或其中之一,則應盡可能使用它們/它。

注意: Web 開發人員在處理 keydown 和 keyup 事件時不應將 keycode 屬性用於可打印字符。 如上所述,keycode 屬性對於可打印字符沒有用,尤其是那些按下 Shift 或 Alt 鍵的輸入。

如果您的目標是現代瀏覽器或設備,那么key屬性旨在保存按下的鍵的,但是此選項仍然很新,而不是跨瀏覽器。


對於跨瀏覽器/遺留支持,大多數人所做的是驗證整個輸入而不是一個鍵。 例如,下面的簡單示例讓用戶鍵入,然后從值字符串中刪除與正則表達式不匹配的字符。

<input id="myInput"/>
var input = document.getElementById('myInput'),
    sanitise = function(){
        input.value = input.value.replace(/\w+/, '');
    };

input.addEventListener('keyup', sanitise);

» 小提琴

暫無
暫無

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

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