【问题标题】:event is not defined in mozilla firefox for javascript function?Mozilla firefox中没有为javascript函数定义事件?
【发布时间】:2010-10-07 21:12:12
【问题描述】:
function onlyNumeric() {   
    if (event.keyCode < 48 || event.keyCode > 57) {
        event.returnValue = false; 
    }

}

onkeypress=onlyNumneric();

在 IE 中,此代码运行良好。但是,在 Mozilla Firefox 中,该事件是未定义的错误。

【问题讨论】:

    标签: javascript internet-explorer firefox cross-browser


    【解决方案1】:

    有些浏览器可能不支持keyCode,你必须使用keyChar

    function onlyNumeric() {   
        var chars = event.keyCode | event.keyChar;
        if (chars  < 48 || chars  > 57) {
            event.returnValue = false; 
        }
    
    }
    
    onkeypress=onlyNumneric();
    

    【讨论】:

      【解决方案2】:

      或者很简单,将参数命名为事件,它将适用于所有浏览器。这是一个 jQueryish 示例:

        $('#' + _aYearBindFlds[i]).on('keyup', function(event) {
        if(! ignoreKey({szKeyCodeList: gvk_kcToIgnore, nKeyCode: event.keyCode }))  this.value = this.value.replace(/\D/g, '');
        });
      

      此示例仅允许为年份字段(在 for each 循环选择器内)输入数字,其中 ingoreKey() 采用 keyCode 列表/数组并比较事件 keyCode 并确定在触发绑定事件之前是否应忽略它。

      我通常用于掩码/其他的键是箭头、退格、制表符,具体取决于上下文/所需的行为。

      您通常也可以在大多数浏览器中使用 event.which 而不是 event.keyCode,至少当您使用 jQuery 时,它依赖于 event.which 来规范化键和鼠标事件。 p>

      我不确定在 js 引擎的幕后会发生什么,但似乎 Mozilla FF 尊重更严格的范围,其中,其他浏览器可能会自动处理 window.event.keyCode 当事件没有显式传递给函数或闭包时,它们自己的作用域。

      在 FF 中,您还可以通过 window.event 来处理事件(如此处的一些示例所示),这将支持这种想法。

      【讨论】:

        【解决方案3】:

        在 FF/Mozilla 中,事件作为参数传递给您的事件处理程序。使用类似以下的方法来解决 IE 中缺少的事件参数。

         function onlyNumeric(e)
         {
             if (!e) {
                e = window.event;
             }
        
             ...
         }
        

        您会发现两者之间还有一些其他差异。这个link 有一些关于如何检测跨浏览器按下哪个键的信息。

        【讨论】:

        • 古老的问题.. 古老的解决方案... 不知道我们什么时候才能克服浏览器大战! ;-)
        猜你喜欢
        • 2012-02-07
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        • 2012-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多