Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: скрипт, <label>, cheсkbox и Интернет Эксплорер
Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012
Помог: 1 раз(а)
Есть форма, в которой множество чекбоксов.
Для облегчения отмечания чекбоксов каждый из них помещен в <label>, что позволяет отмечать чекбокс, тыкая не только в саму коробочку, но и на любую часть текста в лэйбле.
Это работает везде, кроме, конечно, осла. В Эксплорере чекбокс плюет на лэйбл и отмечается ТОЛЬКО при кликании на коробочку чекбокса.
Из-за этого пришлось на лэйбл повесить событие "onclick", которое запускает скрипт, инвертирующий значение чекбокса (был отмечен - снимает, был не отмечен - ставит "cheсked")
Но тут всплыла неприятность - если лэйбл захватывает чекбокс, то в результате получаем некий баг:
1. Если кликать по лэйблу - все срабатывает и отмечается как надо.
2. если кликать по самому чекбоксу - он сначала ОТМЕЧАЕТ его, далее срабатывает событие на онклик-лэйбла и метка СНИМАЕТСЯ.
К сожалению, вынести лэйбл ЗА границы чекбокса нельзя (точнее - нежелательно), так как кликнуть могут как ДО чекбокса, так и после него (на тексте).
Как заблокировать повторную обработку, если чекбокс лежит внутри лэйбла, на котором висит онклик?
----- Истина прежде всего в том, что...
EuGen
Отправлено: 05 Марта, 2013 - 14:28:34
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
LShark
Отправлено: 05 Марта, 2013 - 14:36:21
Частый гость
Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012
Помог: 1 раз(а)
Значит, придется на сам чекбокс вешать тоже онклик с СcancelBubble ? Чтобы дальше не распространялось срабатывание?
----- Истина прежде всего в том, что...
DelphinPRO
Отправлено: 05 Марта, 2013 - 14:43:52
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
LShark пишет:
Из-за этого пришлось на лэйбл повесить событие "onclick", которое запускает скрипт, инвертирующий значение чекбокса (был отмечен - снимает, был не отмечен - ставит "cheсked")
рука-лицо.jpg
настоятельно рекомендую ознакомится со HTML спецификацией, уж коль скоро вы занимаетесь web-разработкой.
Для связи label и input (любого типа, включая textarea) должны быть использованы атрибуты "for" и "id" :
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
IE только недавно начал смотреть в w3c, так что думаю тут е дело в спецификации. ІЕ как раз таки не коректно обрабативает input в label, он понимает только for
DelphinPRO
Отправлено: 05 Марта, 2013 - 15:58:59
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Мелкий, я может не совсем точно выразился. в спеке говорится о том, что в ситуации с вложенным контролом поведение может отличатся на разных платформах.
Цитата:
On other platforms, the behavior might be just to focus the control, or do nothing.
Тогда как для варианта с атрибутами однозначно прописано, что должна быть связь.
----- Чем больше узнаю, тем больше я не знаю.
LShark
Отправлено: 05 Марта, 2013 - 17:59:49
Частый гость
Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012
Помог: 1 раз(а)
DelphinPRO пишет:
Кроме того, не нужно вешать событие на клик, следует прослушивать onchange у инпута.
Именно из за этого весь гемор - если в эксплорере я кликаю НА лэйбле - он НЕ МЕНЯЕТ вложенный в него чекбокс, он его меняет толкьо при прямом клике на чекбоксе. Так что никакого ончейнджа не срабатывает, пока я не кликану напрямую по чеку.
Опера и Гуглобот - меняют.
Мелкий пишет:
The label element may contain at most one descendant input element, button element, select element, or textarea element.
Вот-вот... (Добавление)
Йо, Эксплорер проглотил for и заработал. Гигантское спасибо!
Чегой то я был не в курсе
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.