Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   сбивается событие (https://javascript.ru/forum/events/28624-sbivaetsya-sobytie.html)

czp 27.05.2012 12:50

сбивается событие
 
верстка
<div id="wrapper">
  <div id="button"></div>
</div>

если на вложенный див поставить событие, и после динамически добавлять в родительський див данные(любые)
к примеру :
wrapper = document.getElementById('wrapper');
button = document.getElementById('button');
button.onclick = function() { wrapper.innerHTML += '<div>bla bla</div>'; };

то после первого добавления, все событие на дочерних элементах перестанут работать, как такое исправить? по новой раздавать событие не вариант

Kolyaj 27.05.2012 13:39

Менять innerHTML у внутреннего дива, а не у внешнего. Вы же содержимое новое вставляете, у которого нет никаких событий.

Deff 27.05.2012 13:51

czp,
В принципе, при добавках appendChild (ом), во внутрь внешнего, а не innerHTML - события вроде не теряюца, (*уточнил для мелких фишек, оставшихся внутри

czp 27.05.2012 15:05

так там вставляет текст appendChild не умеет вроде как текст вставлять, аяксом возвращает текст вот и приходится вставлять, и если вы заметили добавлять к существующему

Deff 27.05.2012 15:15

Цитата:

Сообщение от czp (Сообщение 176858)
так там вставляет текст appendChild не умеет вроде как текст вставлять, аяксом возвращает текст вот и приходится вставлять, и если вы заметили добавлять к существующему

Создайте предварительно скрытий div/span с id - в него запихиваете аякс - скрытый div/span вставляете и раскрываете

czp 27.05.2012 16:15

а есть еше альтернатива?

vadim5june 27.05.2012 16:48

Цитата:

Сообщение от czp (Сообщение 176879)
а есть еше альтернатива?

Трудно назвать альтернотивой почти тоже самое-но делаю так
var d=document.createElement('div');
d.innerHTML='bla-bla';
wrapper.appendChild(d)

czp 27.05.2012 16:55

а если там список?
<ul>
<li></li>
<li></li>
</ul>

добавляем еше
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>

как быть?

vadim5june 27.05.2012 17:09

без разницы все просто вставляется-главное знать куда вставлять -внутрь ul или после
то есть вам строка приходит вида?
'<ul><li>....</ul>'

Раед 27.05.2012 17:10

Цитата:

Сообщение от czp
а если там список?

var d=document.createElement('ul');
d.innerHTML='<li>bla-bla</li>';
while (d.children.length) wrapper.appendChild(d.children[0])

czp 28.05.2012 22:02

вы не поняли, если у меня события на клик по списку, если вставить li то события с уже существующих собьются, а если делать обвертку на li и потом ставить в ul получится каша, вот за что я

Раед 28.05.2012 23:31

czp,
Мой скрипт вставляет детей обёртки, а не всю обёртку.

czp 29.05.2012 18:19

точно не собразил сразу)спаисбо потестим, сразу вопрос а если там 150 будет детей?не будет лагать?

Раед 29.05.2012 19:32

Цитата:

Сообщение от czp
сразу вопрос а если там 150 будет детей?не будет лагать?

Да нет, со 150-ю не должен. Можно ещё небольшую оптимизацию повести:
var d=document.createElement('ul');
d.innerHTML='<li>bla-bla</li>';
var fragment = document.createDocumentFragment();
while (d.children.length) fragment.appendChild(d.children[0]);
wrapper.appendChild(fragment);

melky 29.05.2012 22:32

Цитата:

Сообщение от czp
как такое исправить?

все просто. вставлять HTML по методу insertAdjacentHTML("beforeEnd", "myhtml_here") - так обработчики не сбиваются.

cyber 29.05.2012 22:47

Цитата:

Сообщение от melky (Сообщение 177413)
все просто. вставлять HTML по методу insertAdjacentHTML("beforeEnd", "myhtml_here") - так обработчики не сбиваются.

а чем метод отличаеться от insertBefore и других

Раед 29.05.2012 23:05

Цитата:

Сообщение от cyber
а чем метод отличаеться от insertBefore и других

Он вставляет строку HTML кода, а не сам элемент

czp 30.05.2012 07:07

ага, тогда такой вопрос, может он вам глупым покажется(я настолько просто JS не знаю), какой вариант лучше юзать?
вариант который предложил Раед или Melky? менее ресурсоемкий какой?

Раед 30.05.2012 11:25

insertAdjacentHTML вроде лучше

melky 30.05.2012 20:05

Цитата:

Сообщение от czp (Сообщение 177459)
ага, тогда такой вопрос, может он вам глупым покажется(я настолько просто JS не знаю), какой вариант лучше юзать?
вариант который предложил Раед или Melky? менее ресурсоемкий какой?

юзайте то, что проще, и что вам больше нравится.

czp 30.05.2012 21:24

я вот такую еше штуку нашел DocumentFragment, это то что Раед описал(его способ), только уже изначально в JS встроен,
что скажете?ваше мнение
http://learn.javascript.ru/multi-insert

vadim5june 30.05.2012 21:45

Здесь тоже есть
http://javascript.ru/optimize/documentfragment-0
Единственный недостаток-в него с помощью innerHTML нельзя вставлять кажется


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