仅限数字的脚本在firefox 17中不起作用

时间:2012-12-25 14:07:16

标签: javascript

嗨我在Javascript中有以下代码。这不起作用 (您可以在Firefox 17上输入字母)并与其他浏览器一起使用。有人可以告诉我一个解决方法吗?谢谢你的期待。

function onlyNumbers(evt)
{
var e = event || evt; // for trans-browser compatibility
var charCode = e.which || e.keyCode;

if (charCode > 31 && (charCode < 48 || charCode > 57))
    return false;

return true;

}

编辑:

<input name="outletno" type="text" id="outletno" size="15" maxlength="10" onkeypress="return onlyNumbers()" value="<?= htmlentities ($values['outletno']) ?>"></td>

2 个答案:

答案 0 :(得分:3)

您没有将事件参数传递给您的函数。

<input name="outletno" type="text" id="outletno" size="15" maxlength="10" onkeypress="return onlyNumbers(event)" value="<?= htmlentities ($values['outletno']) ?>"></td>

Firefox没有全局“事件”符号。你的函数需要一个参数,但你没有传递它。

您可以将浏览器对“onfoo”元素属性的处理视为使用Function构造函数为您构造函数,如下所示:

element.onfoo = new Function(attributeValue, "event");

(那不是真的会发生什么,但它实际上是这样的。)这意味着属性值中的代码可以预期有一个名为“event”的参数可用,这就是你的意思将传递给你的功能。

您的代码适用于IE,Chrome和Safari,因为这些浏览器执行将“事件”值保留为全局变量。

答案 1 :(得分:0)

这是仅检查数字的不好方法。 charCode远不是跨浏览器的东西。这篇文章解释了键盘事件的大部分差异(如果不是全部):http://unixpapa.com/js/key.html

总的来说,它告诉你尽可能避免使用它们。

这是一种正确的方法(使用onkeyup,因为onkeypress没有更新的值):

document.getElementById('outletno').onkeyup = function() {
    // If the value isn't a number, take off the last character
    if (!/\d+/.test(this.value)) {
        this.value = this.value.slice(0, -1);
    }
};

工作jsfiddle:http://jsfiddle.net/uFRwZ/