Недавно мне дали необычный запрос, с которым мне было очень трудно справиться, который включает в себя захват всех отображаемых символов при вводе в текстовое поле. Настройка выглядит следующим образом:
У меня есть текстовое поле с maxlength 10 символами. Когда пользователь пытается ввести более 10 символов, мне нужно уведомить пользователя о том, что он вводит больше, чем ограничение на количество символов.
Самым простым решением было бы указать maxlength 11, проверить длину для каждого нажатия клавиши и урезать до 10 символов, но это решение кажется немного неуклюжим. Я бы предпочел захватить символ перед keyup и, в зависимости от того, является ли он отображаемым символом, представить уведомление пользователю и предотвратить действие по умолчанию.
Белый список будет сложной задачей, поскольку мы обрабатываем много международных данных.
Я играл с каждой комбинацией keydown, keypress и keyup, читая event.keyCode, < strong>event.charCode и event.what, но я не могу найти ни одной комбинации, которая работала бы во всех браузерах. Лучшее, что я мог сделать, это следующее, которое правильно работает в> = IE6, Chrome5, FF3.6, но не работает в Opera:
ПРИМЕЧАНИЕ. В следующем коде используется jQuery.
$(function(){
$('#textbox').keypress(function(e){
var $this = $(this);
var key = ('undefined'==typeof e.which?e.keyCode:e.which);
if ($this.val().length==($this.attr('maxlength')||10)) {
switch(key){
case 13: //return
case 9: //tab
case 27: //escape
case 8: //backspace
case 0: //other non-alphanumeric
break;
default:
alert('no - '+e.charCode+' - '+e.which+' - '+e.keyCode);
return false;
};
}
});
});
Я соглашусь, что то, что я делаю, скорее всего, слишком усложняет решение, но теперь, когда я в него вложился, я хотел бы узнать о решении.