Вход

Просмотр полной версии : Не отлавливается ДОМ -элемент, созданный динамически.


Lifesaver
12.09.2010, 12:14
Сабж:
По клику на элементе страницы, менюшка клонируется и "врезается" в элемент. Это работает. Но почему то последующие действия с ней (имею в виду сокрытие её и.т.п.) невозможны.
Javascript:
<script type="text/javascript">$(document).ready(function() {$('div.frmln').click(function() { $(this).next('span.dot').append($('div.ugc').clone ().removeClass('he').addClass('sw'));});
//$('div.sw div#common').click(function() { $(this).parent('div.ugc').removeClass('sw').addCla ss('he');});
});</script>
ХТМЛ:
<div class="frmln">Переместить в
<span class="emct"></span>
</div>
<span class="dot"></span>
...
<div class="ugc he">
<div id="common"></div>
<a class="esl" href="#" title="">Ссылка1</a>
<a class="esl" href="#" title="">Ссылка2</a>
</div>
Соответственно .he - дисплей:нон, а .sw -дисплей:блок.
Не работает закомментированная часть кода.
Есть мысли ?

Gvozd
12.09.2010, 12:19
а с чего бы этому коду работать, если у вас неуникальные ID-шники
класс сменили, а ID забыли.
внимательнее надо быть

Lifesaver
12.09.2010, 12:39
Gvozd,
Да что я уже только не пробовал. Уже айдишнег присваивал(#one) к .ugc
Вызов получался следующий (та часть которая не работает):
$('div#one div#common').click(function() { $(this).parent('div#one').removeClass('sw').addCla ss('he');})
Не работает.
Или мне для #common тоже нужно класс добавлять при клонировании и показе ?

Gvozd
12.09.2010, 13:59
вы что, совсем дурак?
у вас два элемента #common
это недопустимо.
смените второму, клоннированному его ID
что непонятного-то было?

Lifesaver
12.09.2010, 15:53
вы что, совсем дурак?
Видимо - да :lol: . Ибо добавив класс вместо айди и изменяя его при всплытии я так ничего и не добился. После размышлений я решил отказаться от айди, ибо таких одновременно работающих окон на странице может быть несколько.

<script type="text/javascript">$(document).ready(function() {
$('div.frmln').click(function() {
$(this).next('span.dot').append($('div.ugc_he').cl one().children('div.common').removeClass('common') .addClass('cmn').end().removeClass('ugc_he').addCl ass('ugc_sw'));
});
$('div.cmn').click(function() {
$(this).removeClass('cmn').addClass('common');// классы отличаются цветом бэкграунда
});
});
</script>

Bertolomych
13.09.2010, 19:10
Lifesaver здесь все проще. Дело даже и не в id-шнике. Уж я понабил шишек на этих динамических элементах (и продолжаю их набивать.. %-))
Дело в том, что команда .click() не работает с динамически созданными элементами. Почему - ХЗ. На сайте jquery.com написано просто: не работает.
Вместо нее используйте команду .live('click', function(){}) подробнее - см. на сайте jquery.com (http://api.jquery.com/live/)

Lifesaver
13.09.2010, 21:31
Bertolomych,
Спасибо огромное. Всё заработало.

Kolyaj
14.09.2010, 10:51
Почему - ХЗ
Потому что вы не понимаете, что происходит при вызове того или иного jQuery-метода.

Bertolomych
14.09.2010, 14:21
Потому что вы не понимаете, что происходит при вызове того или иного jQuery-метода.
Да.. тут уж не поспоришь.. Я как-то пытался развинтить jq на винтики - нихрена не врубился..

exec
14.09.2010, 14:24
Я как-то пытался развинтить jq на винтики - нихрена не врубился..

Если не понятно, как работает тот или иной метод, можно попробовать самому его реализовать и всё станет ясно.