![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| 4epT |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: нет Всего: 3 |
Всем привет. Хочу сделать скрипт который запрещает вводить в поле буквы (то есть сделать input для ввода цифр). Пытаюсь это сделать как можно универсальней ... Вот код:
Код думаю понятен... по нажатию на клавишу, делаем две переменных, в одной (oldValue) текущее значение, во второй (newValue) текущее + то что бы нажали. Проверяю на число и возвращаю true или false. Функция проверки работает (я в ней уверен). Если она вернула true, то смело присваиваем новое значение и все, если false то ставим старое. Постоянно поподаю по ветке else, но значение постоянно наращивается. В чем ошибка ? p.s. если кто то хочет запустить, то вот код метода isInteger
index.html
Это сообщение отредактировал(а) Aliance - 9.4.2012, 14:13 |
||||||
|
|||||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Цифру вводим с первого раза, редактировать нельзя?
Разумнее проверять в конце вода, когда наступило событие onblur, или в форме по submit. Вообще говоря - это решение обычной задачи - "маскирование ввода". Плагинов для jQeury по этому поводу довольно много, а вот насколько они работоспособны - нужно пробовать. В jQuery.UI, вроде, тоже что-то есть -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| 4epT |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: нет Всего: 3 |
с onblur все нормально, но не красиво ) хотелось бы вообще запретить ввод букв в input. и хочется свое ) готовое можно использовать ... не проблема, но свое приятнее.
редактировать можно, нам ничего не помешает ) если я правильно понимаю событие keypress |
|||
|
||||
| Aliance |
|
||||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
Я бы переписал функцию более изящно:
Идем дальше. В последних версиях jQuery 1.7.* метод delegate() был заменен на on(), так что советую все же приучаться к новой модели ;) Теперь, собственно, по коду. Получается-то что событие происходит независимо от условия в if. То есть вставляется либо 1, либо 2 раза символ нажатой клавиши. Для этого нужно отменить выполнение действия события по умолчанию, вызвав метод preventDefault() объекта Event передаваемого аргументом анонимной callback-функции (к слову у тебя этот аргумент почему-то называется obj хотя логичнее что-то типа evt). В итоге имеет следующее:
Для более современного on() можешь переписать по аналогии. |
||||
|
|||||
| 4epT |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: нет Всего: 3 |
Спасибо попробую)
А вот насчет замены delegate на on .. допустим я не знаю версию jQuery на сайте клиента, мне нужно прям в скрипте чекать версию и в зависимости от нее вызывать то или иной метод ? |
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
При подключении файла скриптов jquery-1.6.2.min.js путем нетривиального логического рассуждения можно прийти к аксиоме о том, что подключается версия 1.6.2
Но если и этих умозаключений недостаточно, можно прямо в коде после подключения библиотеки проверить её версию вот так:
|
|||
|
||||
| 4epT |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: нет Всего: 3 |
Я имел ввиду немного другое) я написал свой скрипт, отдал другому человеку он его подключил, и выяснилось что он использует не 1.7 версию а более старые версии.
Ваш пример работает. Но есть пару неудобных вещей ... не работают комбинации типа Ctrl + V ... Я работаю на маке (lion) и в event не приходит ctrlKey = true, оно там false. На stackoverflow нашел вот такой ответ, но я что то не совсем понял что там имелось ввиду. Для клавишь backspace, лево, право, верх, вниз сделал спец метод:
и если была нажата одна из этих клавишь то просто пропускаем их ... Как сделать поддержку горячих клавишь ctrl+v (cmd+v), ctrl + c (cmd+c), ctrl + x (cmd+x) ? в скобках написаны комбинации для мака. Это сообщение отредактировал(а) Aliance - 9.4.2012, 17:59 |
|||
|
||||
| Aliance |
|
||||||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
Предлагаю разбираться по порядку.
При использовании кнопки код на данном форуме было бы не плохо выбирать язык, код которого вставляется. А то меня уже утомило менять посты с html на javascript Валидация формы на стороне клиента должна служить скорее средством помощи и удобства, а не безопасности и надежности. Конечно можно попытаться предвидеть все обстоятельства и максимизировать все варианты исходов, но если пользователь захочет все же обмануть систему - он это сделает. Если я сильно поищу, смогу найти скрипт, который как раз и занимается таким извратом, перехватывая ну чуть ли не все возможные события (и вставить, и отменить и даже перетащить). Только поставь вопрос самому себе - а оно тебе нужно?
я думаю, что тут два варианта: либо предполагать, что человек будет использовать/сможет обновить свою библиотеку до необходимой версии; либо писать 100500 костылей в коде вида:
Опять таки, возможно это моя нелюбовь к конструкциям ifelseifelseifelseif, но я бы твой спец метод переписал так:
|
||||||
|
|||||||
| 4epT |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: нет Всего: 3 |
Насчет неправильного выбора "код" извиняюсь, не заметил.
Код с swith более красив, не спорю.
Нужно с целью изучить и сделать как можно ближе к идеалу. Понятное дело что если захотеть то обмануть можно и ничто не поможет... серверная валидация тоже есть, но хочется сделать именно вот так. Насчет костыля с подключением нужной версии js, да, наверное будет легче просто подключить нужную версию. |
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
Я поищу ссылку и кину, если найду. На самом деле там даже не скрипт, а целая статья с подробным описанием чего и как делается. И само решение лично мне понравилось. Правда статья, если не изменяет память, на английском. Использовал тот скрипт года 3 назад, но там реально были собраны наверное все возможные варианты событий
|
|||
|
||||
| 4epT |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: нет Всего: 3 |
Буду благодарен =)))
|
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
Нашел, кажется оно!
Разве что там идет проверка на макс. кол-во символов, но на этой же основе можно сделать любую валидацию в общем-то. Это сообщение отредактировал(а) Aliance - 9.4.2012, 18:34 |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 10 Всего: 260 |
совет: раз уж речь про универсальность, лучше реализовать в виде плагина jQuery, чтоб к селектору не привязываться
|
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |