在mozilla firefox中没有为javascript函数定义事件?

时间:2009-02-16 13:06:56

标签: javascript internet-explorer firefox cross-browser

function onlyNumeric() {   
    if (event.keyCode < 48 || event.keyCode > 57) {
        event.returnValue = false; 
    }

}

onkeypress=onlyNumneric();

在IE中,此代码工作正常。但是,在Mozilla Firefox中,该事件是一个未定义的错误。

3 个答案:

答案 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();