Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Событие на динамически созданные элементы списка (https://javascript.ru/forum/events/23908-sobytie-na-dinamicheski-sozdannye-ehlementy-spiska.html)

Arigato 11.12.2011 13:38

Событие на динамически созданные элементы списка
 
Простая задачка: заполнить список произвольными данными, удалять строки списка по двойному клику. Решение:
var body = document.getElementsByTagName ("body")[0];
  var select = document.createElement ("select"); 
  select.size = 16;
  body.appendChild (select);
  for ( var i = 0; i < 16; i++ )
  {
    option = new Option ("Option #" + i.toString(), i, false, false);
    select.options[select.options.length] = option;
    option.ondblclick = function() {select.remove (select.selectedIndex)};
  }

Список заполняется во всех браузерах, а вот удаление работает везде, кроме IE. В IE почему-то не срабатывает навешивание события option.ondblclick.
Если же событие навесить не на элементы списка, а на весь список:
select.ondblclick = function () {select.remove (select.selectedIndex)};
То работает везде, в том числе и в IE.

Поясните, с чем связана эта ситуация? Что элемент select, что элементы option, создаются динамически. На select событие работает, а на option - нет. Непонятно...

devote 11.12.2011 17:11

Цитата:

Сообщение от Arigato
Поясните, с чем связана эта ситуация? Что элемент select, что элементы option, создаются динамически. На select событие работает, а на option - нет. Непонятно...

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

Arigato 11.12.2011 20:09

Ясно, спасибо!
А другим путем - это каким?

Мне это чисто в познавательных целях интересно, т.к. описанная задача успешно решается и если событие на сам select навешать, более того, это даже не моя задача, просто стало интересно, почему в IE не срабатывают события на option. Видимо, все, кроме IE, option рассматривают, как самостоятельный элемент.

devote 11.12.2011 20:17

Arigato,
мне просто любопытно, как вообще можно сделать двойной клик на списке, ведь селект закрывается при первом же клике. Не понимаю смысла в двойном клике. Хотя наверно просто не нужно этого было никогда.

nerv_ 11.12.2011 21:56

Arigato, может это будет Вам полезно.

Arigato 11.12.2011 21:59

devote, так там не выпадающий же список: select.size = 16;

nerv_, это общая статья, а тут конкретная проблема.

devote 11.12.2011 22:39

Цитата:

Сообщение от Arigato
devote, так там не выпадающий же список: select.size = 16;

А ну да сорри, подзабыл про это)

ksa 12.12.2011 09:28

Цитата:

Сообщение от Arigato
В IE почему-то не срабатывает навешивание события option.ondblclick.

В моём старом МСДНе у <option> вообще нет такого события... Но у <select> таки есть...


Часовой пояс GMT +3, время: 15:06.