-1

嗨,我在 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>
4

2 回答 2

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 中运行,因为这些浏览器确实将“事件”值作为全局变量保留。

于 2012-12-25T14:10:26.000 回答
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/

于 2012-12-25T14:12:01.787 回答