2014-02-15 2 views
0

У меня есть простая директива, которая предотвращает нечисловую запись в ячейках input[type="number"]. Он работает в Chrome, но не в Firefox. В FF вход не допускается, а не только не числовые символы. Кто-нибудь знает, почему? И любые простые альтернативы?Должна ли операция нажатия клавиш в Угловой директиве по FF?

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

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

Можете ли вы разместить пример в Fiddle/Plunker? –

ответ

3

Кажется, что event.keyCode всегда возвращают 0, так что все становится игнорироваться. MDN says, что charCode, keyCode и which свойства устарели и предлагают использовать key, но он еще не реализован.

Чтобы устранить эту проблему, используйте which, которая, кажется, работает просто отлично:

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

Вы, вероятно, следует рассматривать, как браузеры обрабатывают ключевые коды: проверить наличие всех возможных имен свойств или включить JQuery, прежде чем AngularJS нормализовать события ,

JSBin.

P.S.: клавиши numpad не работают, пользователям это может не понравиться. Я предлагаю фильтровать вход через утилиты ngModelController, которые были бы более Угловыми.

+0

Проблема с 'ngModelController' заключается в том, что она не работает на' input [type = "number"] '. Нечисловые ключи съедают браузер и никогда не попадают в парсеры. –

+0

Он работает на FF, Chrome, Opera, IE и IE8, спасибо. –

Смежные вопросы