Вопрос по javascript, jquery, validation – Код проверки JQuery не позволит удалить введенный текст

0

Я позаимствовал немного кода из этого вопроса (см. Ответ 4):

Как я могу заблокировать или ограничить специальные символы из полей ввода с помощью jquery?

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

$('input').bind('keypress', function (event) {
var regex = new RegExp("^[a-zA-Z0-9]+$");
var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
if (!regex.test(key)) {
   event.preventDefault();
   return false;
}});

Я немного запутался, я попытался настроить его, изменив нажатие клавиши на keyup, но это просто мешает проверке работать. Любые указатели будут любезно приняты.

Ваш Ответ

2   ответа
1

это проблема браузера. В Firefox нажатие клавиш включает мета-клавиши, такие как backspace и клавиши со стрелками, в то время как Chrome нет. Если вы немного подстроите свою логику, чтобы предпочесть, какой из них, а не charCode (который, я думаю, лучше поддерживается в любом случае), вы получите

$('input').bind('keypress', function(event) {
    var regex = new RegExp("^[a-zA-Z0-9]+$");
    var code = event.charCode === 0 ? event.which : event.charCode;
    var key = String.fromCharCode(code);
    if (!regex.test(key) && code !== 8) {
         // 8 is ascii code for backspace
         event.preventDefault();
         return false;
    }
});

Эта скрипка также записывает в консоль ключи и коды, передаваемые в событии при наборе текста. http://jsfiddle.net/Q2MWS/5/

@BernieDavies Существуетonpaste событие, которое вы можете подключить и проверить вставленный текст.stackoverflow.com/questions/1601353/detect-paste-on-input-box
Спасибо JaredMcAteer, который работает просто замечательно - очень признателен. Хотя теперь я должен выяснить, как обрабатывать вставленный ввод. Bernie Davies
0

что event.preventDefault () не позволяет редактировать введенные символы, если они не соответствуют регулярному выражению. Проверьте event.which / event.charCode для других значений, таких как backspace, пробел, десятичная точка-ключ и т. Д.

Хмм, просто прочитайте событие. Что там написано на jquery docs, и это немного сбивает с толку. Я думаю, что я мог бы вернуться к более стандартному подходу, если у кого-то нет других предложений. Спасибо за ответ, хотя. Оценил. Bernie Davies

Похожие вопросы