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 и Интернет Эксплорер

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
LShark
Отправлено: 05 Марта, 2013 - 14:09:58
Post Id



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




Есть форма, в которой множество чекбоксов.

Для облегчения отмечания чекбоксов каждый из них помещен в <label>, что позволяет отмечать чекбокс, тыкая не только в саму коробочку, но и на любую часть текста в лэйбле.

Это работает везде, кроме, конечно, осла. В Эксплорере чекбокс плюет на лэйбл и отмечается ТОЛЬКО при кликании на коробочку чекбокса.

Из-за этого пришлось на лэйбл повесить событие "onclick", которое запускает скрипт, инвертирующий значение чекбокса (был отмечен - снимает, был не отмечен - ставит "cheсked")

Но тут всплыла неприятность - если лэйбл захватывает чекбокс, то в результате получаем некий баг:
1. Если кликать по лэйблу - все срабатывает и отмечается как надо.
2. если кликать по самому чекбоксу - он сначала ОТМЕЧАЕТ его, далее срабатывает событие на онклик-лэйбла и метка СНИМАЕТСЯ.

К сожалению, вынести лэйбл ЗА границы чекбокса нельзя (точнее - нежелательно), так как кликнуть могут как ДО чекбокса, так и после него (на тексте).

Как заблокировать повторную обработку, если чекбокс лежит внутри лэйбла, на котором висит онклик?


-----
Истина прежде всего в том, что...
 
 Top
EuGen Администратор
Отправлено: 05 Марта, 2013 - 14:28:34
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)






-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
LShark
Отправлено: 05 Марта, 2013 - 14:36:21
Post Id



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




Значит, придется на сам чекбокс вешать тоже онклик с СcancelBubble ? Чтобы дальше не распространялось срабатывание?


-----
Истина прежде всего в том, что...
 
 Top
DelphinPRO
Отправлено: 05 Марта, 2013 - 14:43:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




LShark пишет:
Из-за этого пришлось на лэйбл повесить событие "onclick", которое запускает скрипт, инвертирующий значение чекбокса (был отмечен - снимает, был не отмечен - ставит "cheсked")


рука-лицо.jpg

настоятельно рекомендую ознакомится со HTML спецификацией, уж коль скоро вы занимаетесь web-разработкой.

Для связи label и input (любого типа, включая textarea) должны быть использованы атрибуты "for" и "id" :

CODE (html):
скопировать код в буфер обмена
  1. <label for="mylink">text</label>
  2. <input id="mylink" type="checkbox"/>


Более того, вложение инпута в лейбл является семантически неверным ходом.

Кроме того, не нужно вешать событие на клик, следует прослушивать onchange у инпута.

(Отредактировано автором: 05 Марта, 2013 - 14:44:47)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Мелкий Супермодератор
Отправлено: 05 Марта, 2013 - 14:55:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DelphinPRO пишет:
настоятельно рекомендую ознакомится со HTML спецификацией

http://www[dot]w3[dot]org/TR/html-markup/label[dot]html
Цитата:
The label element may contain at most one descendant input element, button element, select element, or textarea element.

http://www[dot]w3[dot]org/TR/REC-html40-[dot][dot][dot]orms[dot]html#h-17[dot]9
Я не умею читать?
Оборачивание элемента в label вместо указания for - нормальное, стандартное поведение.


-----
PostgreSQL DBA
 
 Top
esterio
Отправлено: 05 Марта, 2013 - 15:31:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




IE только недавно начал смотреть в w3c, так что думаю тут е дело в спецификации. ІЕ как раз таки не коректно обрабативает input в label, он понимает только for
 
 Top
DelphinPRO
Отправлено: 05 Марта, 2013 - 15:58:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Мелкий, я может не совсем точно выразился. в спеке говорится о том, что в ситуации с вложенным контролом поведение может отличатся на разных платформах.
Цитата:
On other platforms, the behavior might be just to focus the control, or do nothing.


Тогда как для варианта с атрибутами однозначно прописано, что должна быть связь.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
LShark
Отправлено: 05 Марта, 2013 - 17:59:49
Post Id



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




DelphinPRO пишет:
Кроме того, не нужно вешать событие на клик, следует прослушивать onchange у инпута.

Именно из за этого весь гемор - если в эксплорере я кликаю НА лэйбле - он НЕ МЕНЯЕТ вложенный в него чекбокс, он его меняет толкьо при прямом клике на чекбоксе. Так что никакого ончейнджа не срабатывает, пока я не кликану напрямую по чеку.
Опера и Гуглобот - меняют.

Мелкий пишет:
The label element may contain at most one descendant input element, button element, select element, or textarea element.

Вот-вот...
(Добавление)
Йо, Эксплорер проглотил for и заработал. Гигантское спасибо!
Чегой то я был не в курсе Недовольство, огорчение


-----
Истина прежде всего в том, что...
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB