4

我在验证中遇到问题。它可以在 google chrome 中运行,但不能在 Mozilla 中运行。

喜欢:我有一个表格,其中 Name: _ __ _

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

在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 中不起作用?

4

2 回答 2

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;
}

看到这个小提琴

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


Firefox 中的“undefined问题”来自于event被视为关键字而不是变量,所以window.event === undefined但是event !== undefined,因此,如果您想将事物保留为属性,您可以这样做
onkeypress="return checkerFunction1(window.event||event)"

于 2012-11-19T13:55:31.113 回答
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已经是一个布尔值。当您想返回时不需要 iftruefalse,您基本上是在说:

if(true)
    return true;
else
    return false;

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

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

于 2012-11-19T14:00:11.220 回答