Отобразить время назад на различных элементах, используя jquery, [проблема с новыми элементами, сгенерированными после загрузки DOM] - PullRequest
1 голос
/ 19 сентября 2011

Я использую плагин Jquery http://timeago.yarp.com/ для отображения времени.

Проблема в том, что timeago не вступит в силу для динамически создаваемых элементов.

    $(document).ready(function() {

         $(".timeago").timeago();       // works perfectly fine for the items which are loaded on page load

         //$(".timeago").live(timeago());      // gives me an error ie timeago is not defined

         //$(".timeago").live($(".timeago").timeago());  // gives me an error too much recursion.
         jQuery.timeago.settings.allowFuture = true;
});

Из некоторых поисков Google яузнать кое-что, например:

Использование live - это то же самое, что и использование bind, за исключением того, что оно ограничено только событиями click, dblclick, keydown, keypress, keyup, mousedown, mousemove, mouseout, mouseover и mouseup, и mouseup.

Теперь, как это сделать, если у меня нет события щелчка?Как я могу связать это?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2011

.live() и .bind() назначают обратные вызовы для события. В вашем случае у вас нет события, чтобы назначить функцию, и поэтому она не работает.

Теоретически вы можете назначить свой обратный вызов пользовательскому событию. Однако вам придется вручную запускать событие (используя .trigger()) каждый раз, когда генерируется ваш элемент. Например:

$("abbr.timeago").live("timeago", function() {
   $(this).timeago();
});

// ... and in the bit that generates your item
$new_item.trigger("timeago")

Демо: http://jsfiddle.net/ZjuW4/9

Конечно, использование .live() в этой ситуации является чисто академическим и на самом деле не служит хорошей цели .

Если у вас есть доступ к коду, который генерирует элементы, вы можете просто соединить в цепочке вызов .timeago(), поскольку элементы сгенерированы , т.е. http://jsfiddle.net/ZjuW4/3/

0 голосов
/ 19 сентября 2011

посмотрите в этой теме здесь обсуждалось, как поставить timeago на динамически загружаемые элементы например, результаты ajax-запроса.

Активировать время на только что добавленных элементах

PS: allowFuture не имеет никакого отношения к добавлению timeago во вновь созданные элементы на вашей странице. он просто разрешает даты в будущем (например, «через 3 дня», «на следующей неделе»)

...