powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Нужен совет по событиям для <input type="text">
4 сообщений из 4, страница 1 из 1
Нужен совет по событиям для <input type="text">
    #34802276
Барбудас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Буду благодарен за любую подсказку.

Суть задачи.
Есть страница с множеством полей типа <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.
...
Рейтинг: 0 / 0
Нужен совет по событиям для <input type="text">
    #34802353
Ghirik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я с трудом вынес чтение вашего описания проблемы. :-)) А те события, которые у Вас происходят, не вынес бы тем более. И я бы разнес обработчики на два подгружаемых скрипта. Если Мозилла - грузим для мозилы, а если IE - грузим для IE. Я именно сейчас так и делаю со своим редактором(идет процесс), код получается куда приятнее, понятнее, короче. Грузится всё в мгновение ока.
...
Рейтинг: 0 / 0
Нужен совет по событиям для <input type="text">
    #34802499
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Барбудас
Как условие к задаче: return из onchange убирать нельзя, потому что перед submit в цикле для каждого инпута вызывается метод onchange и в случае возврата хоть одного false форма не сабмитится.
Проблема возникла с тем, что onchange с возвращением значения (через return) по разному отрабатывает в разных браузерах. В IE мы не сможем "покинуть" инпут , пока не вернется true, в мозилле - легко.

напридумывали эстстеки.
onchange="someValidation(this);"
и проверяйте что возвращает someValidation , а не onchange
...
Рейтинг: 0 / 0
Нужен совет по событиям для <input type="text">
    #34804436
Барбудас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LINUXER
напридумывали эстстеки.
onchange="someValidation(this);"
и проверяйте что возвращает someValidation , а не onchange

нельзя. функций валидации несколько, а использовать нужно именно ту, что определена в onchange.

GhirikЯ с трудом вынес чтение вашего описания проблемы. :-)) А те события, которые у Вас происходят, не вынес бы тем более. И я бы разнес обработчики на два подгружаемых скрипта. Если Мозилла - грузим для мозилы, а если IE - грузим для IE. Я именно сейчас так и делаю со своим редактором(идет процесс), код получается куда приятнее, понятнее, короче. Грузится всё в мгновение ока.

за многобукаф извиняюсь, но короче не получилось описать.
что по поводу браузера....
так браузеров много. что поведение в них разное - выявилось случайно.
а хотелось бы какой-то закономерности. проверять не браузер, а именно его настройку касательно отката по onchange....
что ж, видимо это за гранью возможного.

спасибо в любом случае за участие.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Нужен совет по событиям для <input type="text">
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]