function onlyNumeric() {
if (event.keyCode < 48 || event.keyCode > 57) {
event.returnValue = false;
}
}
onkeypress=onlyNumneric();
在IE中,此代码工作正常。但是,在Mozilla Firefox中,该事件是一个未定义的错误。
答案 0 :(得分:16)
在FF / Mozilla中,事件作为参数传递给事件处理程序。使用类似下面的内容来解决IE中缺少的事件参数。
function onlyNumeric(e)
{
if (!e) {
e = window.event;
}
...
}
你会发现两者之间也存在一些其他差异。这个link有一些关于如何以跨浏览器的方式检测哪个键被按下的信息。
答案 1 :(得分:2)
或者很简单,将参数命名为 事件,它将适用于所有浏览器。这是一个jQueryish示例:
$('#' + _aYearBindFlds[i]).on('keyup', function(event) {
if(! ignoreKey({szKeyCodeList: gvk_kcToIgnore, nKeyCode: event.keyCode })) this.value = this.value.replace(/\D/g, '');
});
此示例仅允许为年份字段输入数字(在每个循环选择器内部),其中ingoreKey()获取keyCode列表/数组并比较事件keyCode并确定在触发绑定事件之前是否应忽略它。
我通常用于掩码/其他的键是箭头,退格键,制表符,具体取决于上下文/所需行为。
在大多数浏览器中,您通常也可以使用event.which而不是 event.keyCode ,至少在使用依赖于event.which来规范化键和鼠标事件的jQuery时。
我不确定在js引擎的封面下发生了什么,但似乎Mozilla FF尊重更严格的范围,其中,其他浏览器可能会自动寻址 window.event.keyCode 当事件未显式传递给函数或闭包时,范围自行调整。
在FF中,你也可以通过 window.event 来解决这个事件(如这里的一些例子所示),这将支持这个想法。
答案 2 :(得分:0)
有些浏览器可能不支持keyCode,你必须使用keyChar
function onlyNumeric() {
var chars = event.keyCode | event.keyChar;
if (chars < 48 || chars > 57) {
event.returnValue = false;
}
}
onkeypress=onlyNumneric();