JavaScript是不是在Firefox和IE的工作,但在Chrome

问题描述:

我开发了许多文本框像用户名和用户名的HTML网页的工作,我已经加入像这样单独的.js一个JavaScript代码文件JavaScript是不是在Firefox和IE的工作,但在Chrome

function CommonKeyPressIsAlpha(evt){ 
    var charCode = (evt.which) ? evt.which : event.keyCode 
    if ((charCode > 64 && charCode < 91) || (charCode > 96 && charCode < 123)){ 
     document.getElementById("errordisp").innerHTML = ""; 
     return true; 
    }else{ 
     document.getElementById("errordisp").innerHTML = "Please enter a valid name!"; 
     return false; 
    } 
} 

每当用户输入用户名文本字段,我调用这个函数来验证用户只输入字符。我在用户名文本字段中调用这个函数:

onkeypress="return CommonKeyPressIsAlpha(evt);" 

它在Chrome中工作正常,但不在Firefox和IE中,有什么问题?

+1

请注意Java和JavaScript之间的差异!他们是不一样的! – WarrenFaith 2011-05-19 12:06:32

+0

请确保您通过[JSLINT](http://www.jslint.com/)和[验证您的标记](http://validator.w3.org/)运行您的Javascript。 – 2011-05-19 12:09:38

你需要传递event进入处理程序在你的onkeypress属性:

onkeypress="return CommonKeyPressIsAlpha(event);" 

这适用于所有主要的浏览器,但依赖于该属性使用event而非evt。我已经写了关于如何在SO before上工作的细节。

+0

非常感谢...... – Muthu 2011-07-20 05:29:38

您的功能非常庞大。使用onkeyoress="return CommonKeyPressIsAlpha(event)"(记:事件),并尝试:

function CommonKeyPressIsAlpha(e){ 
    e = e || event; 
    var matched = (/[a-z]/i).test (String.fromCharCode(e.keyCode || e.which)) 
    document.getElementById('report').innerHTML = 
     matched ? "" : "Valid input: 'a-z' and/or 'A-Z'" 
    return matched; 
} 

看到this jsfiddle

+0

或'return/[a-z] /i.test(chr)'。除了缩短之外,'test'会比'match'更好的表现。但是,您的代码似乎忽略了OP输出到DOM的验证消息。 – 2011-05-19 12:37:14

+0

@Andy:是的,它也返回一个整洁的真/假。相应地修改代码和jsfiddle。 – KooiInc 2011-05-19 12:43:45

你的代码是依靠Chrome错误,其中匿名函数(你的情况onkeypress)编译为一个内联事件处理程序它在Chrome中命名为evt。规范要求将该参数命名为event。见http://code.google.com/p/chromium/issues/detail?id=80912

的解决方案是使用onkeypress="return CommonKeyPressIsAlpha(event);"