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中,有什么问题?
您的功能非常庞大。使用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;
}
或'return/[a-z] /i.test(chr)'。除了缩短之外,'test'会比'match'更好的表现。但是,您的代码似乎忽略了OP输出到DOM的验证消息。 – 2011-05-19 12:37:14
@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);"
请注意Java和JavaScript之间的差异!他们是不一样的! – WarrenFaith 2011-05-19 12:06:32
请确保您通过[JSLINT](http://www.jslint.com/)和[验证您的标记](http://validator.w3.org/)运行您的Javascript。 – 2011-05-19 12:09:38