В angularjs есть какие-либо функции доступны, что позволяет только цифры должны быть набраны в текстовом поле likeangularjs: позволяет только цифры должны быть набраны в текстовом поле
ответ
Эта функциональность именно то, что вам нужно. http://docs.angularjs.org/api/ng.directive:input.number
EDIT:
Вы можете обернуть JQuery плагин в директиве. Я создал пример здесь: http://jsfiddle.net/anazimok/jTJCF/
HTML:
<div ng-app="myApp">
<div>
<input type="text" min="0" max="99" number-mask="" ng-model="message">
<button ng-click="handleClick()">Broadcast</button>
</div>
</div>
CSS:
.ng-invalid {
border: 1px solid red;
}
JS:
// declare a module
var app = angular.module('myApp', []);
app.directive('numberMask', function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
$(element).numeric();
}
}
});
Не совсем просил ОП. Ваше решение обеспечивает проверку ввода (т. Е. Показывает ошибку при обнаружении не числа), но пользователи все равно могут вводить не-число в текстовое поле. – tamakisquare
да, правда, что .. это не то, что мне нужно ..: $ –
@AliHasan Вы должны изменить принятый ответ. –
Этот код показывает пример, как предотвратить ввод не значные символы ,
angular.module('app').
directive('onlyDigits', function() {
return {
restrict: 'A',
require: '?ngModel',
link: function (scope, element, attrs, modelCtrl) {
modelCtrl.$parsers.push(function (inputValue) {
if (inputValue == undefined) return '';
var transformedInput = inputValue.replace(/[^0-9]/g, '');
if (transformedInput !== inputValue) {
modelCtrl.$setViewValue(transformedInput);
modelCtrl.$render();
}
return transformedInput;
});
}
};
});
Спасибо. Я упростил разметку без цифр и написал тест: https://gist.github.com/henrik/769d49136744ddcaa1dc На момент написания кода код JS, но тест - это CoffeeScript. Вскоре оба будут CoffeeScript, я думаю. –
Этот фрагмент кода работает, но ему действительно нужны комментарии – TrtG
Код хорош, но не работает для десятичных цифр. – Rahul
Чтобы построить на ответ Антона немного -
angular.module("app").directive("onlyDigits", function()
{
return {
restrict: 'EA',
require: '?ngModel',
scope:{
allowDecimal: '@',
allowNegative: '@',
minNum: '@',
maxNum: '@'
},
link: function (scope, element, attrs, ngModel)
{
if (!ngModel) return;
ngModel.$parsers.unshift(function (inputValue)
{
var decimalFound = false;
var digits = inputValue.split('').filter(function (s,i)
{
var b = (!isNaN(s) && s != ' ');
if (!b && attrs.allowDecimal && attrs.allowDecimal == "true")
{
if (s == "." && decimalFound == false)
{
decimalFound = true;
b = true;
}
}
if (!b && attrs.allowNegative && attrs.allowNegative == "true")
{
b = (s == '-' && i == 0);
}
return b;
}).join('');
if (attrs.maxNum && !isNaN(attrs.maxNum) && parseFloat(digits) > parseFloat(attrs.maxNum))
{
digits = attrs.maxNum;
}
if (attrs.minNum && !isNaN(attrs.minNum) && parseFloat(digits) < parseFloat(attrs.minNum))
{
digits = attrs.minNum;
}
ngModel.$viewValue = digits;
ngModel.$render();
return digits;
});
}
};
});
Вместо 'ngModel. $ ViewValue = цифр' вы должны использовать' ngModel. $ SetViewValue (цифры) ', чтобы он ударил остальные ngModelController и ngForm. Мне это нужно, поскольку это было обязательным полем, и когда я ввел письмо (которое не показывалось), форма была отмечена как действительная - неверно. – Chaz
проблема с этой директивой заключается в том, что вы вводите юридический номер и по ошибке набираете букву, которую удаляет ваше поле. – orikoko
HTML
<input type="text" name="number" only-digits>
// Просто введите 123
.directive('onlyDigits', function() {
return {
require: 'ngModel',
restrict: 'A',
link: function (scope, element, attr, ctrl) {
function inputValue(val) {
if (val) {
var digits = val.replace(/[^0-9]/g, '');
if (digits !== val) {
ctrl.$setViewValue(digits);
ctrl.$render();
}
return parseInt(digits,10);
}
return undefined;
}
ctrl.$parsers.push(inputValue);
}
};
});
// Тип: 123 или 123,45
.directive('onlyDigits', function() {
return {
require: 'ngModel',
restrict: 'A',
link: function (scope, element, attr, ctrl) {
function inputValue(val) {
if (val) {
var digits = val.replace(/[^0-9.]/g, '');
if (digits.split('.').length > 2) {
digits = digits.substring(0, digits.length - 1);
}
if (digits !== val) {
ctrl.$setViewValue(digits);
ctrl.$render();
}
return parseFloat(digits);
}
return undefined;
}
ctrl.$parsers.push(inputValue);
}
};
});
Просьба представить, что вы тоже код. –
Ваш второй пример (// type: 123 или 123.45) позволяет вводить несколько десятичных знаков, например. 11.22..33 ..... 444 вернется действительный. –
Я думаю, что мы можем справиться с этим, если: (digits.split ('.'). Length> 2) digits = digitits.substring (0, digitits.length - 1); – Matt
Я только что использовал ng-keypress в директиве для ввода.
HTML:
<input type="text" ng-keypress="filterValue($event)"/>
JS:
$scope.filterValue = function($event){
if(isNaN(String.fromCharCode($event.keyCode))){
$event.preventDefault();
}
};
Хотя это не «угловой способ», это кажется относительно безопасным вариантом для предотвращения ввода пользователем. – Blowsie
Это кажется очень простым, хотя не угловой способ может остановить некоторые, мне определенно понравился этот подход. Пришлось добавить еще 2 случая, которые нужно было разрешить, но событие.который === 8 и event.which === 46 (для backspace и delete соответственно) – Markiv
Хорошее решение! Я использовал комментарий @Markiv для улучшения вашего кода в [новом ответе] (https://stackoverflow.com/questions/16091218/angularjs-allows-only-numbers-to-be-typed-into-a-text-box # answer-35823435), который позволяет издавать, отправлять и осуществлять навигацию. –
Вы можете проверить https://github.com/rajesh38/ng-only-number
- Это ограничивает ввод в цифры и десятичной точки в текстовом поле при вводе.
- Вы можете ограничить количество цифр, которое должно быть разрешено до и после десятичной точки
- Он также обрезает цифры после десятичной точки, если десятичная точка удалена из текстового поля, например. если вы положили 123.45, а затем удалили десятичную точку, она также удалит конечные цифры после десятичной точки и сделает ее 123.
Это отлично работает, спасибо большое! –
Это самый простой и быстрый способ для ввода только числа.
<input type="text" id="cardno" placeholder="Enter a Number" onkeypress='return event.charCode >= 48 && event.charCode <= 57' required>
Благодаря
Это метод, который работает для меня.Он основан в samnau anwser, но позволяет представить форму с ENTER
, увеличивать и уменьшать число с UP
и DOWN
стрел, издание с DEL
, BACKSPACE
, LEFT
и RIGHT
и перемещаться корыта поля с TAB
. Обратите внимание, что он работает для целых положительных чисел, таких как сумма.
HTML:
<input ng-keypress="onlyNumbers($event)" min="0" type="number" step="1" ng-pattern="/^[0-9]{1,8}$/" ng-model="... >
ANGULARJS:
$scope.onlyNumbers = function(event){
var keys={
'up': 38,'right':39,'down':40,'left':37,
'escape':27,'backspace':8,'tab':9,'enter':13,'del':46,
'0':48,'1':49,'2':50,'3':51,'4':52,'5':53,'6':54,'7':55,'8':56,'9':57
};
for(var index in keys) {
if (!keys.hasOwnProperty(index)) continue;
if (event.charCode==keys[index]||event.keyCode==keys[index]) {
return; //default event
}
}
event.preventDefault();
};
У меня была аналогичная проблема и в конечном итоге закреплять и событие
ng-change="changeCount()"
затем:
self.changeCount = function() {
if (!self.info.itemcount) {
self.info.itemcount = 1;
}
};
Таким образом, пользователь по умолчанию считается 1, если вставлен недопустимый номер.
Основано на djsiz решение, завернутое в директиву. Примечание: это не будет обрабатывать значные номера, но она может быть легко модернизирована
angular
.module("app")
.directive("mwInputRestrict", [
function() {
return {
restrict: "A",
link: function (scope, element, attrs) {
element.on("keypress", function (event) {
if (attrs.mwInputRestrict === "onlynumbers") {
// allow only digits to be entered, or backspace and delete keys to be pressed
return (event.charCode >= 48 && event.charCode <= 57) ||
(event.keyCode === 8 || event.keyCode === 46);
}
return true;
});
}
}
}
]);
HTML
<input type="text"
class="form-control"
id="inputHeight"
name="inputHeight"
placeholder="Height"
mw-input-restrict="onlynumbers"
ng-model="ctbtVm.dto.height">
Мое решение принять Копировать & Вставить и сохранить позицию курсора. Он используется для стоимости продуктов, поэтому позволяет использовать только положительные десятичные значения. Может быть рефактористом очень легко разрешить отрицательные или целые цифры.
angular
.module("client")
.directive("onlyNumber", function() {
return {
restrict: "A",
link: function (scope, element, attr) {
element.bind('input', function() {
var position = this.selectionStart - 1;
//remove all but number and .
var fixed = this.value.replace(/[^0-9\.]/g, '');
if (fixed.charAt(0) === '.') //can't start with .
fixed = fixed.slice(1);
var pos = fixed.indexOf(".") + 1;
if (pos >= 0) //avoid more than one .
fixed = fixed.substr(0, pos) + fixed.slice(pos).replace('.', '');
if (this.value !== fixed) {
this.value = fixed;
this.selectionStart = position;
this.selectionEnd = position;
}
});
}
};
});
Put на странице HTML:
<input type="text" class="form-control" only-number ng-model="vm.cost" />
Это самое лучшее, еще! – Sebastianb
Вы могли бы сделать что-то вроде этого: Используйте нг-шаблон с RegExp "/^ [0-9] + $/ «это означает, что действительны только целые числа.
<form novalidate name="form">
<input type="text" data-ng-model="age" id="age" name="age" ng-pattern="/^[0-9]+$/">
<span ng-show="form.age.$error.pattern">The value is not a valid integer</span>
</form>
Просто использовать HTML5
<input type="number" min="0"/>
Да, * type = "number" * определенно отлично работает. Но он не может корректно отображаться, когда мы вводим такие типы входных групп. – Praveen
не работает для всех браузеров. – alphapilgrim
Я arraged на JQuery в this
.directive('numbersCommaOnly', function(){
return {
require: 'ngModel',
link: function (scope, element, attrs, ngModel) {
element.on('keydown', function(event) {
// Allow: backspace, delete, tab, escape, enter and .
var array2 = [46, 8, 9, 27, 13, 110, 190]
if (array2.indexOf(event.which) !== -1 ||
// Allow: Ctrl+A
(event.which == 65 && event.ctrlKey === true) ||
// Allow: Ctrl+C
(event.which == 67 && event.ctrlKey === true) ||
// Allow: Ctrl+X
(event.which == 88 && event.ctrlKey === true) ||
// Allow: home, end, left, right
(event.which >= 35 && event.which <= 39)) {
// let it happen, don't do anything
return;
}
// Ensure that it is a number and stop the keypress
if ((event.shiftKey || (event.which < 48 || event.which > 57)) && (event.which < 96 || event.which > 105)) {
event.preventDefault();
}
});
}
};
})
Это решение будет принимать только числовые, '' и '-'
Также это ограничивает запись пространства в текстовом поле. Я использовал директиву для достижения того же.
Пожалуйста, обратитесь к нижеприведенному рабочему примеру.
http://jsfiddle.net/vfsHX/2697/
HTML:
<form ng-app="myapp" name="myform" novalidate>
<div ng-controller="Ctrl">
<input name="number" is-number ng-model="wks.number">
<span ng-show="!wks.validity">Value is invalid</span>
</div>
JS:
var $scope;
var app = angular.module('myapp', []);
app.controller('Ctrl', function($scope) {
$scope.wks = {number: 1, validity: true}
});
app.directive('isNumber', function() {
return {
require: 'ngModel',
link: function (scope, element, attrs, ngModel) {
element.bind("keydown keypress", function (event) {
if(event.which === 32) {
event.returnValue = false;
return false;
}
});
scope.$watch(attrs.ngModel, function(newValue,oldValue) {
var arr = String(newValue).split("");
if (arr.length === 0) return;
if (arr.length === 1 && (arr[0] == '-' || arr[0] === '.')) return;
if (arr.length === 2 && newValue === '-.') return;
if (isNaN(newValue)) {
//scope.wks.number = oldValue;
ngModel.$setViewValue(oldValue);
ngModel.$render();
}
});
}
};
});
Используйте ng-only-number
, чтобы позволить только цифры, например:
<input type="text" ng-only-number data-max-length=5>
Это просто и понятно. Просто скопируйте этот код, и ваша проблема будет решена. Для большего количества условий просто измените значение в pattern.and ваша работа будет выполнена.
<input type="text" pattern="[0-9]{0,}" oninvalid="this.setCustomValidity('Please enter only numeric value. Special character are not allowed.')" oninput="setCustomValidity('')">
<input type="text" ng-keypress="checkNumeric($event)"/>
//inside controller
$scope.dot = false
$scope.checkNumeric = function($event){
if(String.fromCharCode($event.keyCode) == "." && !$scope.dot){
$scope.dot = true
}
else if(isNaN(String.fromCharCode($event.keyCode))){
$event.preventDefault();
}
, чтобы разрешить поплавок! –
- 1. JQuery выпадающий, что позволяет пользовательские записи должны быть набраны
- 2. Показать только цифры в текстовом поле
- 3. Форматирование JTextField принять три цифры в лучшем случае, но ничего до 1-3 цифры могут быть набраны
- 4. Разрешить только пробел, подчеркивание, алфавиты и цифры в текстовом поле
- 5. как разрешать только цифры и точки в текстовом поле vb.net
- 6. AngularJS Input [type = "number"] Проверка позволяет вводить только цифры
- 7. Angularjs: Позволяет вводить только цифры в tel и numeric input
- 8. Разрешить пространство в текстовом поле
- 9. Проверка в текстовом поле в C# Winforms - Должны допускать только цифры от 1 до 100
- 10. не должен принимать цифры в текстовом поле
- 11. Разрешить только две цифры после десятичного кода в текстовом поле?
- 12. jquery/JS разрешает только цифры и буквы в текстовом поле
- 13. Только цифры в текстовом поле не превышают баланс счета
- 14. позволяет только алфавиты в текстовом поле с помощью Java Script
- 15. Значения combobox должны отображаться в текстовом поле
- 16. В текстовом поле в текстовом поле в формате Angularjs есть
- 17. AngularJS: Cookies должны быть переданы только для определенного запроса
- 18. angularjs: позволяет вводить только десятичные знаки в текстовое поле
- 19. Angularjs галочкой поле ввода позволяет
- 20. позволяют цифры, точки и забой и удалять в текстовом поле
- 21. Показать уникальные символы только в текстовом поле
- 22. Тема не позволяет JavaScript должны быть выполнены
- 23. Отображать только последние символы в текстовом поле
- 24. jquery ввод только числа в текстовом поле
- 25. angularjs force uppercase в текстовом поле
- 26. ввод только в текстовом поле только в приложении java
- 27. Отображение предложений в текстовом поле в angularjs
- 28. RegEx.Replace в текстовом поле
- 29. AngularJS нг-модели с или в текстовом поле
- 30. Scala Функция фильтрации поле для только цифры
использование <вход нг-шаблон = «\ d *» ... /> –
это для validation.works по представлению form.i хотят запретить пользователю вводить любые другие значения, чем число/integer..like this http://www.texotela.co.uk/code/jquery/numeric/ –
Возможный дубликат [Как ограничить ввод только номерами?] (http://stackoverflow.com/ questions/14615236/how-do-i-restrict-an-input-to-only-accept-numbers) –