2011-12-18 2 views
0

Я использую Jquery для динамической загрузки страниц моего сайта. В основном скрывается и отображается divs в зависимости от того, какой параметр главного меню вы нажимаете.jQuery не выполняет обработчик, связанный с динамически создаваемыми элементами

Проблема связана с подменю, которое находится на каждой странице; при изменении страниц меню изменяется. Я освобождаю <ul> и добавляю новые <li> с каждой сменой страницы.

У меня есть jquery hover и нажмите функции, которые идут с подменю <li>, они работают только, если страница обновлена. Кажется, что функции перестают работать, потому что я удаляю <li>, а затем добавляю новые.

Я не понимаю, почему функции не просто переходят к новому <li>.

Почему это?

+0

Пожалуйста, разместите соответствующий код здесь. – talnicolas

+0

Скорее всего, какой-то ошибочный код ... Looky? –

ответ

0

От этого я понимаю вашу проблему, возможно, не использует .live() метод .. см. http://api.jquery.com/live/. когда новые li добавлены, DOM уже загружен, и поэтому ваши новые теги li не могут быть прикреплены с помощью .hover() или любого другого события, которое вы хотите. Это может быть не совсем то, что вы ищете .. но должно быть достаточно близко

1

У меня была та же проблема. jQuery может связывать события только с элементами, которые существуют при загрузке сценария jQuery (загрузка страницы). Чтобы позволить событию повлиять на ваши вновь созданные элементы, вам нужно добавить .live к вашему коду. Как это:

$(".menu").live("hover", function(){ 
    // your action here 
}); 

Более подробную информацию об этом можно найти на сайте http://api.jquery.com/live/ Я считаю, что есть некоторые дополнительные команды, такие как .bind, и т.д., которые делают то же самое или нечто подобное, но я всегда использовал .live I надеюсь, это поможет!

+0

спасибо, это сработало отлично –

+0

Действительно рад, что смогу помочь. Я новичок в StackOverflow и пытаюсь создать репутацию. Можете ли вы принять ответ (или, тем не менее, это работает)? –

1

Новый, не устаревший способ сделать это с помощью обработчика .on(), начиная с jQuery 1.7. Если вы используете эту версию вместо .live(), используйте:

$('#menu').on('hover', 'li', function() { ... }); 
Смежные вопросы