12 ответов:
использовать
minатрибут такой:<input type="number" min="0">
Я не был доволен @Abhrabm ответ потому что:
это только мешало отрицательный номера от ввода с стрелки вверх/вниз, в то время как пользователь может ввести отрицательное число с клавиатуры.
решение состоит в том, чтобы предотвратить с код:
// Select your input element. var number = document.getElementById('number'); // Listen for input event on numInput. number.onkeydown = function(e) { if(!((e.keyCode > 95 && e.keyCode < 106) || (e.keyCode > 47 && e.keyCode < 58) || e.keyCode == 8)) { return false; } }<form action="" method="post"> <input type="number" id="number" min="0" /> <input type="submit" value="Click me!"/> </form>разъяснение @Hugh Guiney:
какой ключ коды проверяются:
- 95,
- 47,
таким образом, этот скрипт предотвращает ввод недопустимого ключа во вход.
этот код работает нормально для меня. Пожалуйста, проверьте:
<input type="number" name="test" min="0" oninput="validity.valid||(value='');">
простой способ:
<input min='0' type="number" onkeypress="return (event.charCode == 8 || event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57">
ответ @Manwal хорош, но мне нравится код с меньшим количеством строк кода для лучшей читаемости. Также мне нравится использовать использование onclick/onkeypress в html вместо этого.
мой предлагаемое решение делает то же самое: Добавить
min="0" onkeypress="return isNumberKey(event)"на вход html и
function isNumberKey(evt){ var charCode = (evt.which) ? evt.which : event.keyCode; return !(charCode > 31 && (charCode < 48 || charCode > 57)); }как функция javascript.
Как уже было сказано, он делает то же самое. Это просто личные предпочтения о том, как решить проблему.
просто для справки: с помощью jQuery вы можете перезаписать отрицательные значения на focusout следующим кодом:
$(document).ready(function(){ $("body").delegate('#myInputNumber', 'focusout', function(){ if($(this).val() < 0){ $(this).val('0'); } }); });это не заменяет проверку на стороне сервера!
вот угловое решение 2:
создать класс OnlyNumber
import {Directive, ElementRef, HostListener} from '@angular/core'; @Directive({ selector: '[OnlyNumber]' }) export class OnlyNumber { // Allow decimal numbers. The \. is only allowed once to occur private regex: RegExp = new RegExp(/^[0-9]+(\.[0-9]*){0,1}$/g); // Allow key codes for special events. Reflect : // Backspace, tab, end, home private specialKeys: Array<string> = ['Backspace', 'Tab', 'End', 'Home']; constructor(private el: ElementRef) { } @HostListener('keydown', ['$event']) onKeyDown(event: KeyboardEvent) { // Allow Backspace, tab, end, and home keys if (this.specialKeys.indexOf(event.key) !== -1) { return; } // Do not use event.keycode this is deprecated. // See: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode let current: string = this.el.nativeElement.value; // We need this because the current value on the DOM element // is not yet updated with the value from this event let next: string = current.concat(event.key); if (next && !String(next).match(this.regex)) { event.preventDefault(); } } }добавить OnlyNumber к объявлениям в приложении.модуль.ts и использовать, как это, как это в любом месте вашего приложения
<input OnlyNumber="true">
<input type="number" name="credit_days" pattern="[^\-]+" #credit_days="ngModel" class="form-control" placeholder="{{ 'Enter credit days' | translate }}" min="0" [(ngModel)]="provider.credit_days" onkeypress="return (event.charCode == 8 || event.charCode == 0 || event.charCode == 13) ? null : event.charCode >= 48 && event.charCode <= 57" onpaste="return false">
это решение позволяет все функции клавиатуры, включая копирование вставить с клавиатуры. Это предотвращает вставку отрицательных чисел с помощью мыши. Он работает со всеми браузерами и демо на codepen использует bootstrap и jQuery. Это должно работать с неанглоязычными настройками и клавиатурами. Если браузер не поддерживает захват событий вставки (IE), он удалит отрицательный знак после фокусировки. Это решение ведет себя так, как должен вести себя собственный браузер с min=0 типовое число.
разметка:
<form> <input class="form-control positive-numeric-only" id="id-blah1" min="0" name="nm1" type="number" value="0" /> <input class="form-control positive-numeric-only" id="id-blah2" min="0" name="nm2" type="number" value="0" /> </form>Javascript
$(document).ready(function() { $("input.positive-numeric-only").on("keydown", function(e) { var char = e.originalEvent.key.replace(/[^0-9^.^,]/, ""); if (char.length == 0 && !(e.originalEvent.ctrlKey || e.originalEvent.metaKey)) { e.preventDefault(); } }); $("input.positive-numeric-only").bind("paste", function(e) { var numbers = e.originalEvent.clipboardData .getData("text") .replace(/[^0-9^.^,]/g, ""); e.preventDefault(); var the_val = parseFloat(numbers); if (the_val > 0) { $(this).val(the_val.toFixed(2)); } }); $("input.positive-numeric-only").focusout(function(e) { if (!isNaN(this.value) && this.value.length != 0) { this.value = Math.abs(parseFloat(this.value)).toFixed(2); } else { this.value = 0; } }); });
oninput="this.value=(this.value < Number(this.min) || this.value > Number(this.max)) ? '' : this.value;"
вот решение, которое лучше всего работало для поля кол-во, которое допускает только числа.
// Only allow numbers, backspace and left/right direction on QTY input if(!((e.keyCode > 95 && e.keyCode < 106) // numpad numbers || (e.keyCode > 47 && e.keyCode < 58) // numbers || [8, 9, 35, 36, 37, 39].indexOf(e.keyCode) >= 0 // backspace, tab, home, end, left arrow, right arrow || (e.keyCode == 65 && (e.ctrlKey === true || e.metaKey === true)) // Ctrl/Cmd + A || (e.keyCode == 67 && (e.ctrlKey === true || e.metaKey === true)) // Ctrl/Cmd + C || (e.keyCode == 88 && (e.ctrlKey === true || e.metaKey === true)) // Ctrl/Cmd + X || (e.keyCode == 86 && (e.ctrlKey === true || e.metaKey === true)) // Ctrl/Cmd + V )) { return false; }

Comments