2014-10-21 3 views
0

Это мой код и он позволяет вводить цифры только. Как ограничить ввод нуля (0) в качестве первой цифры?Ограничить ноль в поле ввода только числовой

$('.btn').keypress(function(e) { 
     var code = e.which; 
     if(($(this).val().indexOf(".") == -1 && code == 46) || (code >= 48 && code <= 57) || (code == 8) || (code >= 48 && code <= 57)){ 
      return true; 
     }  
     return false; 
    }) 
    .bind('paste',function(e) { 
    e.preventDefault(); 
}); 
+0

прочитать о регулярных выражений http://www.w3schools.com/jsref/jsref_obj_regexp.asp – Mate

+6

Я хотел бы предложить вам не попытаться предотвратить ввод 0 в качестве первой цифры. Просто очистите все ведущие нули, прежде чем использовать поле. Помните, что вы можете получать значения в полях иначе, чем просто нажимать клавиши, такие как копирование/вставка и перетаскивание, поэтому попытка принудительно выполнить действия с клавиатуры не заставит вас все равно убирать значение в конце. Кроме того, попытка блокировать функцию вставки просто просто раздражает. Я ненавижу сайты, которые это делают. Нет никаких оснований для его блокировки, потому что это мой бизнес, как я предоставляю вход, а не ваш. – jfriend00

+0

@Mate: спасибо. Хорошо, это способ сделать это 'this.value.length == 0 && e.which == 48'? Теперь проблема заключается в том, как использовать ее с помощью оператора 'return'? – Anne

ответ

3

Выполнение такой работы требует довольно большого прогресса JavaScript.

Сначала вам нужно знать, находится ли курсор/каретка в положении 0. Для этого вам нужно получить диапазон выбора. Это зависит от используемого вами браузера.

https://developer.mozilla.org/en-US/docs/Web/API/Range

Фрагмент кода (непроверенные) для Firefox & SeaMonkey:

var range = document.createRange(); 
var pos = range.startOffset; 

Тогда, если позиция равна нулю, вы знаете, что курсор находится в начале, и вы можете проверить нажата ли пользователь нулю:

if(pos == 0 && code == 48) 
{ 
    e.preventDefault(); 
} 

Однако вы также хотите подумать о случае, когда пользователь вводит 100 и помещает свой курсор или выделение в включают 1 или 10. Теперь он удаляет удаление, а оставшийся - один ноль (0). Как справиться с этим делом будет очень сильно зависеть от того, что вы действительно хотите предложить в своем интерфейсе. Я, кажется, очень раздражает системы, которые автоматически удаляли остальную часть текста, потому что он не соответствует действительному ответу, а не дает вам способ исправить его ... Я считаю, что это не очень хорошее решение.

Другое решение, которое я обычно делаю, заключается в том, чтобы позволить пользователю вводить что-либо в поле (ну, в вашем случае, допускать только цифры, но любое случайное число), а затем, когда пользователь нажимает кнопку «Отправить», , то вы проверите формат. Если формат неверен, выведите ошибку. В этом случае комментарий о регулярном выражении Mate применяется хорошо (хотя он ничего не объяснял в своем комментарии, kindda sad).

+0

Спасибо. очень информативно. – Anne

0

попробовать это образцы

$('#numeric').bind('keypress', function (event) { 
var regex = new RegExp("^[1-9\b]+$"); 
var key = String.fromCharCode(!event.charCode ? event.which : event.charCode); 
if (!regex.test(key)) { 
    event.preventDefault(); 
    return false; 
} 
}); 
Смежные вопросы