Недавно мне дали необычный запрос о том, что у меня самое сложное время, когда приходится вводить все отображаемые символы при вводе в текстовое поле.Настройка выглядит следующим образом:
У меня есть текстовое поле, которое имеет maxlength из 10 символов.Когда пользователь пытается набрать более 10 символов, мне нужно уведомить пользователя о том, что он печатает за пределами допустимого числа символов.
Самое простое решение - указать maxlength из11, проверьте длину на каждом keyup и обрежьте до 10 символов, но это решение кажется немного глупым.Что я предпочел бы сделать, так это захватить символ перед keyup и, в зависимости от того, является ли он отображаемым символом, представить уведомление пользователю и предотвратить действие по умолчанию.
Белый список будет сложным, поскольку мы обрабатываем много международных данных.
Я играл с каждой комбинацией нажатие клавиши , нажатие клавиши и keyup , чтение event.keyCode , event.charCode и event.which , но я не могу найти ни одной комбинации, которая работаетво всех браузерах.Лучшее, что я мог бы сделать, это следующее, что работает правильно в> = IE6, Chrome5, FF3.6, но не работает в Opera:
NOTE : В следующем коде используется 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;
};
}
});
});
Я допускаю, что то, что я делаю, вероятно, чрезмерно спроектирует решение, но теперь, когда я вложил в него средства, я хотел бы узнать о решении.Спасибо за вашу помощь!