按键事件是否应该在FF上的Angular指令中工作?

时间:2014-02-15 15:48:19

标签: angularjs firefox angularjs-directive

我有一个简单的指令,可以阻止input[type="number"]框中的非数字输入。它适用于Chrome,但不适用于Firefox。在FF中,不允许任何输入,而不仅仅是非数字字符。谁知道为什么?还有什么简单的选择吗?

validationModule.directive('naturalNumber', function () {
    return {
        link: function (scope, element) {

            element.bind('keypress', function (event) {
                if (event.keyCode < 48 || event.keyCode > 57) {
                    event.preventDefault();
                }
            });
        }
    };
});

1 个答案:

答案 0 :(得分:4)

似乎event.keyCode总是返回0,所以一切都被忽略了。 charCode已弃用keyCodewhichkey属性,建议改为使用which,但尚未实施。

要解决此问题,请使用element.bind('keypress', function (event) { if (event.which < 48 || event.which > 57) { event.preventDefault(); } }); ,这似乎工作正常:

{{1}}

您应该考虑浏览器如何处理密钥代码:检查所有可能的属性名称,或者在AngularJS之前包含jQuery以规范化事件。

MDN says

P.S。:小键盘键不起作用,用户可能不喜欢。我建议通过JSBin实用程序过滤输入,这将更像是Angular-way。