验证在Mozilla中无效,但在Google Chrome中有效

时间:2012-11-19 13:39:51

标签: javascript validation jsp firefox google-chrome

我在验证方面遇到问题。它适用于谷歌浏览器,但不适用于Mozilla。

赞:我有一个名称为 _ __ _ 的表单。

我想进行验证,以便用户无法写入数值。

在javascript中:

function checkerFunction1(e)
{
    var charCode1=e.which || e.keyCode;
    if((charCode1 >= 65 && charCode1 <= 90) ||(charCode1 >= 97 && charCode1 <= 122) ||(charCode1==32 || charCode1==8 || charCode1==46))
        return true;
    return false;
}     

在jsp页面内:

<input type="text" value="Name" onkeypress="return checkerFunction1(window.event)"/>

为什么它不能在Mozilla中运行?

2 个答案:

答案 0 :(得分:1)

您忘记致电e.preventDefault()

function checkerFunction1(e) {
    e = e || window.event;
    var charCode1=e.which || e.keyCode;
    if(
        (charCode1 >= 65 && charCode1 <= 90)
        || (charCode1 >= 97 && charCode1 <= 122)
        || (charCode1==32 || charCode1==8 || charCode1==46)
    ) return true;
    return e.preventDefault(), false;
}

请参阅this fiddle

最好在窗口加载时将事件侦听器附加到DOM元素,而不是通过html属性,因为它将HTML与JavaScript分开。它还具有选择何时捕获事件本身的额外好处 如果兼容性绝对需要,您仍然可以在函数内部获取window.event


Firefox中的“undefined问题”来自event被视为关键字而不是变量,因此window.event === undefined只有event !== undefined,因此如果您想保留作为属性的东西,你可以像这样做 onkeypress="return checkerFunction1(window.event||event)"

答案 1 :(得分:1)

这应该解决它:

function checkerFunction1(e)
{
    e = e || window.event;
    var charCode1=e.which || e.keyCode;
    return ((charCode1 >= 65 && charCode1 <= 90) ||(charCode1 >= 97 && charCode1 <= 122) ||(charCode1==32 || charCode1==8 || charCode1==46))
} 

if括号中的条件已经是布尔值。如果您想要返回truefalse,则不需要if,您基本上是这样说的:

if(true)
    return true;
else
    return false;

Firefox告诉我“e未定义” 您需要为该浏览器使用event对象(如上所示)

preventDefault()不需要。返回false将阻止Firefox在该字段中输入错误密钥。