Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не отлавливается ДОМ -элемент, созданный динамически. (https://javascript.ru/forum/jquery/11764-ne-otlavlivaetsya-dom-ehlement-sozdannyjj-dinamicheski.html)

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').addClass('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').addClass('he');})

Не работает.
Или мне для #common тоже нужно класс добавлять при клонировании и показе ?

Gvozd 12.09.2010 13:59

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

Lifesaver 12.09.2010 15:53

Цитата:

Сообщение от Gvozd
вы что, совсем дурак?

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

<script type="text/javascript">$(document).ready(function() {
    $('div.frmln').click(function() { 
        $(this).next('span.dot').append($('div.ugc_he').clone().children('div.common').removeClass('common').addClass('cmn').end().removeClass('ugc_he').addClass('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

Lifesaver 13.09.2010 21:31

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

Kolyaj 14.09.2010 10:51

Цитата:

Сообщение от Bertolomych
Почему - ХЗ

Потому что вы не понимаете, что происходит при вызове того или иного jQuery-метода.

Bertolomych 14.09.2010 14:21

Цитата:

Сообщение от Kolyaj (Сообщение 70795)
Потому что вы не понимаете, что происходит при вызове того или иного jQuery-метода.

Да.. тут уж не поспоришь.. Я как-то пытался развинтить jq на винтики - нихрена не врубился..

exec 14.09.2010 14:24

Цитата:

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


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