jQuery Spinner: нечисловые значения
Я использую jQuery Spinner с установленными значениями min (0) и max (500). Что можно сделать, чтобы пользователь не мог напрямую вводить нечисловые значения (или значения вне диапазона 0-500) в поле ввода? Значения min и max работают, когда пользователь использует вращающиеся кнопки, но не когда что-то вводится в форму ввода.
4 ответа
Вы можете форсировать числовой ввод, используя такую технику:
var MIN = 0;
var MAX = 500;
$('#foo').on('keyup', function(e) {
var v = parseInt($(this).val());
if (isNaN(v)) {
return $(this).val(MIN);
}
if ($(this).val() < MIN) {
$(this).val(MIN);
} else if ($(this).val() > MAX) {
$(this).val(MAX);
} else {
$(this).val(v);
}
});
(См. Пример: http://jsfiddle.net/foxbunny/ustFf/)
Но я не рекомендую это. Это не ожидаемое поведение текстового поля, и это может сбить с толку, по крайней мере, некоторых пользователей. Поэтому лучше просто отобразить предупреждение, если значение не находится в ожидаемом диапазоне.
Вы можете установить его только для чтения:
document.getElementById('mySpinner').readOnly = true;
Вот как я это сделал:
jQuery( "#spinner" ).spinner({ min: 0 });
jQuery( "#spinner").keyup(function() {
if( isNaN (jQuery(this).val() )){ //Only numbers !
jQuery(this).prop("value", "0") ; //Back to 0, as it is the minimum
}
});
Готово.
Я думаю, что это правильный способ сделать это, а не принятый способ, поскольку это намного проще.
$('YOURID/CLASS').spinner({
min: 1,
max: 100,
change: function (event, ui ) {
$(this).spinner('value', parseInt($(this).spinner('value'),10) || 1);
}
});
Любой ввод, который не является числом, будет заменен номером 1. Вы также можете заменить || 1 с окном предупреждения, чтобы предупредить пользователя о том, что номер, который он вводит в поле, недопустим.
Вы также должны использовать валидатор javascript для проверки числа при отправке формы, и еще одну на стороне сервера при чтении ввода в.