Использование livequery: не удается найти распространяемый элемент, созданный с помощью ajax

Я использую плагин 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.


person Kel    schedule 18.05.2010    source источник


Ответы (1)


Есть ли причина, по которой вы не можете перейти на 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);
person ground5hark    schedule 18.05.2010
comment
Спасибо за ваш комментарий. причина, по которой я не хочу обновляться до 1.4.2, заключается в том, что наша программа может сломаться. - person Kel; 18.05.2010