这是我的代码:
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);
}
答案 0 :(得分:1)
不推荐使用KeyboardEvent.keyCode
属性 - 在Firefox中,所有可打印字符都会导致零值,因此您的处理程序始终返回而不执行任何操作。 charCode
属性似乎仍然适用于Chrome和Firefox,但您不应该依赖它,因为实际上所有字符代码属性都已弃用或非标准。
如MDN所述:
新的Web应用程序不应该使用它。 IE和Firefox已经(部分)支持KeyboardEvent.key。此外,Google Chrome和Safari支持在DOM Level 3事件的旧草稿中定义的KeyboardEvent.keyIdentifier。如果你可以使用它们或其中一个,你应该尽可能地使用它们。
注意:在处理keydown和keyup事件时,Web开发人员不应将keycode属性用于可打印字符。如上所述,keycode属性对可打印字符没有用,特别是那些按下Shift或Alt键输入的字符。
如果您定位的是现代浏览器或设备,则key
属性旨在保留所按键的值,但此选项仍然很新,而不是跨浏览器。< / p>
对于跨浏览器/旧版支持,大多数人所做的是验证整个输入而不是一个键。例如,下面的简单示例允许用户键入,但随后从值字符串中删除与正则表达式不匹配的字符。
<input id="myInput"/>
var input = document.getElementById('myInput'),
sanitise = function(){
input.value = input.value.replace(/\w+/, '');
};
input.addEventListener('keyup', sanitise);