input[type=number]
по определению принимает только целые числа в качестве входных данных. Попробуйте сами. Попробуйте ввести буквы, и это не позволит вам.
Нет необходимости в JavaScript, так как он уже встроен. Возможно, вы имели в виду input[type=text]
?
Вы можете сделать это с помощью угловых директив. Это будет выглядеть примерно так (хотя я не уверен в моем синтаксисе)
app.directive('onlyNumbers', function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.bind("keydown", function(event) {
if ((event.keyCode > 47 && event.keyCode < 58) && !event.shiftKey) {
event.preventDefault();
return false;
}
});
}
});
В синтаксисе может быть несколько ошибок, но я разберу основную формулу.
Поскольку мы работаем с элементом ввода, имеет смысл использовать директиву attribute
. Мы можем сделать это, установив для свойства restrict
значение A.
Поскольку мы будем прослушивать события нажатия клавиш, мы должны использовать функцию link
. Мы хотим прослушивать событие keydown
, чтобы определить, когда клавиша начинает нажиматься.
Чтобы узнать, набрал ли пользователь число, мы будем использовать keyCodes
, для которых числовые клавиши от 48 до 57 представляют от 0 до 9 соответственно. Однако мы не учли специальные символы, которые требуют нажатия цифровых клавиш. Поэтому мы также убеждаемся, что клавиша Shift не нажата.
Затем мы можем добавить эту директиву в качестве атрибута нашего элемента ввода.
<input type="text" only-numbers />
person
Richard Hamilton
schedule
01.12.2015