2013-06-19 2 views
0

вы можете мне помочь?jQuery - ссылка на селектор, который входит в комплект .load

У меня есть сайт, на котором отображается «новости». Последний один отображается при первой загрузке страницы, но старые новости загружаются только тогда, когда посетитель нажимает на ссылку под названием #oldnews:

$('#oldnews').load('ajax/older_news.php'); 

В «older_news.php» файл, после загрузки, имеет другое которая предназначена для скрыть эти старые новости. Однако эта ссылка не работает.

Код jQuery, который обрабатывает этот механизм «спрятать», находится на главной странице, поэтому я предполагаю, что jQuery не скрывает новости, потому что не знает, что ссылка существует (поскольку она загружается только тогда, когда пользователь кликает по ссылке).

Любая информация о лучшем подходе к решению этого вопроса? Спасибо.

+4

Вам необходимо делегирование событий для обработки динамически добавляемые контента, '$ (документ). on ('click', '#idOfLink', function() {// do stuff}); ' – tymeJV

+0

Нам нужно больше кода. – Alvaro

+1

Вы правы в своем предположении, что привязка не происходит, потому что элемент не существует в момент запуска исходного кода jQuery. Если вы разместите соответствующую разметку ссылок, которая поступает из файла old_news.php, мы можем помочь вам написать оператор 'on()', который связывает четное с элементом, когда он добавляется в DOM. –

ответ

2

2 вещи. Как указано в комментариях, вы можете использовать .delegate. В новых версиях jQuery (1.7+) это очень просто.

$(function() { // good old $(document).load(function(){ //shorter! 
    // use document to asign delegation 
    //  asign an event like "click" or "keyup" 
    //   asign a selector like "#elementID" or ".element-class-name" or even just "ul li" 
    $(document).on("event", "selector", function(e) { 
     /* DO WORK 
       like any other event callback 
     */ 
    }) 

    // for older versions of jQuery, use .delegate or .bind 
    $(document).delegate("event", "selector", function(e) { }) 
}) 

Однако, не забывайте, что .load имеет функцию обратного вызова, а также. Таким образом, вы могли бы сделать что-то вроде:

$(function() { 
    $('#oldnews').load('ajax/older_news.php', function(response, status, jqXHR) { 
     $(".new-stuff:visible").hide(); 
    }); 
}) 
+0

Спасибо всем, я посмотрю, пойму ли я, что делать на основе всех ваших отзывов. Веб-сайт является следующим: http://www.scopiomagazine.com/ (имеет несколько разделов, и большинство из них имеют «старый» переключатель, который работает, который загружает внешний файл, который, в свою очередь, «скрывает», переключатель, который не работает) – BMM

+0

Спасибо за решение! Решаемые. – BMM

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