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);
}