|
|
|
Нужен совет по событиям для <input type="text">
|
|||
|---|---|---|---|
|
#18+
Буду благодарен за любую подсказку. Суть задачи. Есть страница с множеством полей типа <input type="text" onchange="return someValidation(this);" /> someValidation() и т.п. - это функции проверки валидности введенного значения. их несколько, но действуют по одному сценарию: вначале сбрасывается выделение цветом контрола (если есть). затем, если значение пустая строка, то считаем что значение валидно и выходим с возвратом true. если же хоть какое-то значение указано, то проверяем его на валидность. если значение невалидно, то контрол выделяется красным (чтобы пользователь видел невалидные инпуты) и функция возвращает false , иначе - true. Как условие к задаче: return из onchange убирать нельзя, потому что перед submit в цикле для каждого инпута вызывается метод onchange и в случае возврата хоть одного false форма не сабмитится. Проблема возникла с тем, что onchange с возвращением значения (через return) по разному отрабатывает в разных браузерах. В IE мы не сможем "покинуть" инпут , пока не вернется true, в мозилле - легко. так вот с мозиллой, если имеем дело с невалидным значением, проблем нет - вышли из инпута, оно "стало" красным... а вот в IE появилась проблема следующая. пытаемся выйти из инпута, значение не валидно, инпут стал "красным", фокус остался в инпуте. решили заполнить инпут попозже, стерли значение , вышли из инпута - а цвет-то остался красным, т.к. "onchange event occurs when a control loses the input focus and its value has been modified since gaining focus. ".... 1) Первой идеей было обрабатывать еще и onblur() с таким же содержимым как и onchange (без return), но ... в общем, не совсем "эстетично". 2) Второй идеей было в функции , где инпут "красится", проверить что инпут в фокусе. Таким образом, если инпут остался в фокусе, значит имеем дело с поведением IE и инпут можно не "красить" - мы просто не сможем "выйти" с невалидным значением, значит и пользователю не надо дополнительно указывать на этот инпут - он будет либо "пустым", либо валидным. А если инпут не в фокусе, значит его нужно "красить". Однако , столкнулся с тем, что в javascript не определено что-то вроде hasFocus для инпутов, поэтому я пришел к третьей идеи. 3) Третьей идеей было обрабатывать onblur() и onfocus() для каждого элемента и фиксировать аттрибут hasFocus , который можно было бы проверять, раз уже нету "стандартного" свойтсва/метода. Однако эту идею тоже пока отложил - опять же неэстетично. :) 4) Четвертой идеей стала безумная мысль - каким-то образом получить в javascripte некий атрибут-опцию, отвечащую за вышеописанное поведение браузера. И реализовывать "окраску" в зависимости от этой опции. Но уверен на 99% что такой атрибут за гранью понимания javascript. :)) Больше пока идей нет. Вот, решил спросить идей и мнений у общественности. А так, видимо придется реализовывать 1. или 2+3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 22:59 |
|
||
|
Нужен совет по событиям для <input type="text">
|
|||
|---|---|---|---|
|
#18+
Я с трудом вынес чтение вашего описания проблемы. :-)) А те события, которые у Вас происходят, не вынес бы тем более. И я бы разнес обработчики на два подгружаемых скрипта. Если Мозилла - грузим для мозилы, а если IE - грузим для IE. Я именно сейчас так и делаю со своим редактором(идет процесс), код получается куда приятнее, понятнее, короче. Грузится всё в мгновение ока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2007, 02:06 |
|
||
|
Нужен совет по событиям для <input type="text">
|
|||
|---|---|---|---|
|
#18+
Барбудас Как условие к задаче: return из onchange убирать нельзя, потому что перед submit в цикле для каждого инпута вызывается метод onchange и в случае возврата хоть одного false форма не сабмитится. Проблема возникла с тем, что onchange с возвращением значения (через return) по разному отрабатывает в разных браузерах. В IE мы не сможем "покинуть" инпут , пока не вернется true, в мозилле - легко. напридумывали эстстеки. onchange="someValidation(this);" и проверяйте что возвращает someValidation , а не onchange ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2007, 12:03 |
|
||
|
Нужен совет по событиям для <input type="text">
|
|||
|---|---|---|---|
|
#18+
LINUXER напридумывали эстстеки. onchange="someValidation(this);" и проверяйте что возвращает someValidation , а не onchange нельзя. функций валидации несколько, а использовать нужно именно ту, что определена в onchange. GhirikЯ с трудом вынес чтение вашего описания проблемы. :-)) А те события, которые у Вас происходят, не вынес бы тем более. И я бы разнес обработчики на два подгружаемых скрипта. Если Мозилла - грузим для мозилы, а если IE - грузим для IE. Я именно сейчас так и делаю со своим редактором(идет процесс), код получается куда приятнее, понятнее, короче. Грузится всё в мгновение ока. за многобукаф извиняюсь, но короче не получилось описать. что по поводу браузера.... так браузеров много. что поведение в них разное - выявилось случайно. а хотелось бы какой-то закономерности. проверять не браузер, а именно его настройку касательно отката по onchange.... что ж, видимо это за гранью возможного. спасибо в любом случае за участие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 12:01 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=34802353&tid=1457640]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 143ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...