Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript按键事件在Firefox中不起作用_Javascript - Fatal编程技术网

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

Javascript按键事件在Firefox中不起作用,javascript,Javascript,这是我的密码: 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).m

这是我的密码:

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中,所有可打印字符都会导致零值,因此处理程序总是返回而不做任何操作。该属性似乎在Chrome和Firefox中都能正常工作,但您不应该依赖它,因为实际上所有字符代码属性都是不推荐的或非标准的

如MDN所述:

这不应该被新的web应用程序使用。IE和Firefox已经(部分)支持KeyboardEvent.key。此外,Google Chrome和Safari支持KeyboardEvent.keyIdentifier,这是在旧的DOM Level 3事件草案中定义的。如果你能使用它们或其中一个,你应该尽可能地使用它们/它

注意:Web开发人员在处理keydown和keyup事件时,不应将keycode属性用于可打印字符。如上所述,keycode属性对于可打印字符不有用,尤其是那些按下Shift或Alt键输入的字符

如果您的目标是现代浏览器或设备,则该属性旨在保留按下键的,但是该选项仍然是全新的,并且不是跨浏览器的


对于跨浏览器/传统支持,大多数人所做的是验证整个输入,而不是只验证一个键。例如,下面的简单示例允许用户键入,但随后会从与正则表达式不匹配的值字符串中删除字符


var input=document.getElementById('myInput'),
消毒=功能(){
input.value=input.value.replace(/\w+/,“”);
};
input.addEventListener('keyup',sanitise);

更好的缩进+错误日志+“on”函数的主体会很有帮助。将
Regexp
替换为
Regexp
(顺便说一句
Regexp
在Chrome中不起作用…。@拖延者抱歉,这实际上是Regexp。@Emissary我如何解决这个问题?@拖延者主体上的函数已经添加。
function on(obj,evt,func) { 
   if (obj.addEventListener) obj.addEventListener(evt,func,false); 
   else obj.attachEvent("on"+evt,func); 
}