2016-07-07 1 views
6

У меня есть простой входной номер, как это:Предотвратить буква «е» и точки из набираясь во входном номером

<input type="number"/> 

При попытке ввода ничего, кроме числа или буквы «е», он не работает, но когда я набираю букву «е», он работает.

Я проверил спецификации w3.org и четко указал, что плавающие числа могут быть напечатаны с использованием нормального обозначения (например: 10.2) или научной нотации (например: 1e2).

Так что мой вопрос: есть ли способ предотвратить ввод пользователем букв и точек. Сказано по-другому: есть ли способ, чтобы ввести номер ввода ТОЛЬКО ЦЕЛЕВЫЕ НОМЕРА?

У меня есть идея сделать это с помощью директивы Angular, которую я буду вводить как атрибут для моего ввода, но я действительно не знаю, как это сделать.

EDIT: То, что я хотел бы сделать это, чтобы имитировать то же поведения, что мы имеем сейчас, когда пытается ввести любую другую букву алфавита, кроме «е» или «». Я хочу сказать, что я не хочу видеть письмо, появившееся на вкладке (как сейчас).

+2

Возможный дубликат. Пожалуйста, обратитесь к: http://stackoverflow.com/questions/19966417/prevent-typing-non-numeric-in-input-type-number?rq=1 – Mfusiki

+0

Все хаки, которые я нашел там, не моделируют то же поведение, что в настоящее время мы вводим номер ввода при вводе любой другой буквы, чем «e». – Mathemagician

+0

Вы нашли то, что хотели в ответ? Если да, отметьте то, что вам нужно в качестве ответа. – Weedoze

ответ

6

Вы правы, что это должно быть сделано с помощью директивы. Просто создайте директиву и прикрепите ее к input. Эта директива должна слушать keypress и/или keydown события. Возможно также вставить события. Если введенный символ является событием «e» или точкой вызова .preventDefault();

angular.module('app', []) 
 
    .directive('yrInteger', yrInteger); 
 

 
function yrInteger() { 
 
    return { 
 
    restrict: 'A', 
 
    link: function(scope, element, attrs) { 
 
    
 
     element.on('keypress', function(event) { 
 

 
     if (!isIntegerChar()) 
 
      event.preventDefault(); 
 
     
 
     function isIntegerChar() { 
 
      return /[0-9]|-/.test(
 
      String.fromCharCode(event.which)) 
 
     } 
 

 
     })  
 
    
 
    } 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app"> 
 
    <input 
 
     type="number" 
 
     yr-integer 
 
     /> 
 
</div>

+1

Если я копирую и вставляю, он все еще разрешает e –

+1

Можете ли вы предоставить plunkr или какой-нибудь другой воспроизводимый пример? – Martin

+1

U просто скопируйте текст, в котором есть e, и вставьте это –

0

Вы можете просто использовать ng-pattern на вашем входе

Контроллер

$scope.onlyDigits= /^\d+$/; 

HTML

<input ng-pattern="onlyDigits" type="number" /> 

Это использование шаблон \d, который для любого числового значения

+0

Этот шаблон будет содержать целые числа, а не целые числа. Целые числа всех чисел и отрицательные числа этих чисел. – Martin

+0

http: //www.w3schools.com/jsref/jsref_regexp_digit.asp -> Метасимвол \ d используется для нахождения цифры от 0 до 9. – Weedoze

+0

Да. '\ d' совпадает с' [0-9] '. Ни один из них не соответствует целым числам. -1 - действительное целое число, '/^\ d + $ /. Test ('- 1')' возвращает 'false'. – Martin