Использование livequery: не удается найти распространенный элемент, созданный с помощью ajax - PullRequest
1 голос
/ 18 мая 2010

Я использую jQuery 1.3.2 и плагин Live Query. Скрипт должен работать как в FF, так и в IE6. Обновление jQuery и использование live вместо этого невозможно.

Каким-то образом этот скрипт не будет вызываться динамически созданным элементом.

    $('select').livequery('change',function(){
      var select_id  = $(this).attr("id");                                                                            ...
...
...

});

$('select').livequery('mouseover',hideExtensions());

function hideExtensions(){
...
...
}

И в IE6, и в FF функция корректно вызывается статическими (уже существующими) элементами. Однако он не вызывается динамически созданным элементом.

В чем может быть причина?

Обновление Я протестировал ту же функцию с «вживую». Это работало в FF, но не в IE6, конечно, нет ... Вот почему я ищу обходной путь с livequery.

1 Ответ

0 голосов
/ 18 мая 2010

Есть ли причина, по которой вы не можете перейти на jQuery 1.4.2 и использовать встроенный обратный вызов live?

Если livequery не работает, альтернативой, которую вы можете попробовать, является некоторое «ручное» делегирование событий с некоторым базовым JavaScript, и полагайтесь на всплывающее событие для непосредственного родителя. Допустим, у вас была такая структура DOM:

<div id='something'>
    <a href='#' class='some-tag'></a>
    <a href='#' class='some-tag'></a>
    <a href='#' class='some-tag'></a>
    <!-- more dynamic elements 'a' tags identical to those above added here -->
</div>

И в вашем JavaScript:

var something = document.getElementById( 'something' );

something.addEventListener('click', function(e) {
    e = window.event || e;

    // If the target of the event is the added anchor we're looking for
    if (e['srcElement' in e ? 'srcElement' : 'target'].getAttribute('class') === 'some-tag')
        // code block goes here

    return false;

}, false);
...