Недавно пришлось прикручивать "умную" валидацию данных на клиенте через JavaScript. Заказчик захотел, чтобы в числовые поля нельзя было вбить нечисловые символы. Обычно (у нормальных людей) это делается так, чтобы при сабмите формы сгенерированный скрипт пробегался по полям - и подсвечивал (алертил, и т.п.) ошибки. Вначале был запрещен ввод пользователем не цифр. Работало это через onkeypress - там по event.charCode проверялся собственно код символа. Но тут за дело взялся тестер - и как всегда в подобных случаях предложил хуйню решение (запретить ctrl+v на поле, т.к. через него вставить не число можно), которое пришлось реализовывать.
И оказалось, что onkeypress на ctrl+v вообще по-барабану - он его пропускает и ложит на все болт. Погуглив немного - переделал все под onkeydown - return !event.ctrlKey; И тут полетели странные баги - оказалось что фильтр, пропускавший только числа - теперь магическим образом пропускает и символы v,c,#,$ - причем только их.
И только по просшествии 2-х часов и около 5 переделок всего пришло откровение:
onkeypress - ложит болт на ctrl+v, однако коды символов приходят именно такими какими они есть
onkeydown - может отловить ctrl+v, однако коды символов - это коды нажатых клавишь! т.е. на раскладку ему тоже по-барабану
Так что если кому-нить нужно будет реализовать такую-же муть - пристрелите тестера нафиг надо юзать одновременно и то и то.