Скрипт исчезает при загрузке динамического содержимого

После загрузки шаблона PHP (с использованием функции загрузки jQuery) этот простой скрипт не заставит DIV исчезнуть:

$("#trigger").click(function(event){
$("#removeThisDIV").hide();

Бит HTML:

<p id="trigger">X</p>

Пробовал удалять другие DIV перед загрузкой - работает нормально. После загрузки скрипт сдох. Идеи?

Спасибо.


person Tomer Lichtash    schedule 02.09.2009    source источник


Ответы (2)


Используйте делегирование событий с помощью live, так как после вызова $.load вновь добавленные элементы не будут иметь щелчка обработчик событий, привязанный к ним:

$("#trigger").live("click",function(event){
    $("#removeThisDIV").hide();
});

В качестве альтернативы используйте обратный вызов $.load:

$('#blah').load('some.html', function() {
    $("#trigger").click(function() {
        $("#removeThisDIV").hide();
    });
});

Чтобы live работало, вам необходимо использовать jQuery 1.3 или более позднюю версию. Надеюсь, это помогло.

person karim79    schedule 02.09.2009

Как упоминает karim79, div, который вы хотите использовать в качестве триггера, не был частью DOM, когда вы назначали функцию щелчка, поэтому он не имеет необходимой функциональности. Конечно, вы можете просто поместить js в сам шаблон PHP;

<p id="trigger" onclick="$('#removeThisDIV').hide();">X</p>

Не забудьте включить jquery над этим элементом, иначе он выдаст ошибку «$ не распознан».

person Mathew    schedule 02.09.2009
comment
Я бы предпочел обрабатывать эти функции из файла сценариев, но спасибо за ваши усилия и внимание. - person Tomer Lichtash; 02.09.2009