2012-05-29 2 views
2

У меня есть следующий код, который загружает некоторый html (который включает в себя привязки) в div, когда я нажимаю ссылку в navMenu. Когда я перехожу через него, <p>'s скрыты, но они не скрыты, когда страница наконец появляется. После отображения страницы contentClickFunction скрывает/показывает <p>'s, как и ожидалось.Какие события запускаются, когда jquery присваивает innerHtml

Я считаю, что мне нужно что-то вроде «ready», но для присвоения innerHtml. Есть ли событие, которое я могу слушать, поэтому мой вызов скрыть не переопределяется?

Я знаю, что могу достичь своей цели, добавив параметр css #content li>p { display:none; }, но я хочу понять, что происходит.

$(document).ready(function(){ 
    $("#content").on("click", "li>a", contentClickFunction); 
    $("#navMenu a").click(function(event){ 
     var href = $(this).attr("href"); 
     event.preventDefault(); 
     $.get(href , function(data){ 
      $("#content").html(data); 
     }); 
     $("#content li > p").hide(); 
    }); 
    }); 

ответ

2

DOM ready пожары только один раз.

Вы можете использовать mutation events (DOMNodeInserted), но они устарели.

Вы также можете создать пользовательское событие:

function handler(){ 
    // Do stuff 
} 

$('#content').on('insert', handler); 

$.get(href , function(data){ 
    $("#content").html(data).trigger('insert'); 
}); 

Последний вариант кажется лучшим для вас.

+0

Спасибо. Это работает, хотя по-прежнему кажется, что должно быть построено событие, которое указывает, что документ был выложен. Возможно, это то, что DOMContentLoaded будет в HTML5? – LenB

+0

@LenB. Боюсь, что для изменений DOM нет встроенного и хорошего события. 'DOMContentLoaded' похоже на событие' ready' jQuery. (На самом деле, jQuery использует его ...) – gdoron

Смежные вопросы