2014-12-04 3 views
0

У меня есть этот источник, который пишет время назад. (Я использую timeago как плагин JQuery)jQuery timeago не всегда работает

<script> 
$(document).ready(function() { 
    $("abbr.timeago").timeago(); 
}); 

function timeago(time) { 
    isoTime = new Date(); 
    isoTime.setTime(time); 
    return "<abbr class='timeago' title='"+isoTime.toISOString()+"'></abbr>"; 
} 


function add() { 
    $('#ex').append(timeago(time)); 
} 
</script> 

, когда я пытаюсь позвонить в add() функции, ее не всегда.

это работает хорошо:

<script> 
add(); 
</script> 

, но когда я пытаюсь вызвать его с помощью кнопки, его не работает:

<button onclick='add()'>button</button> 

я думаю, что это не работает, потому что эта линия $("abbr.timeago").timeago(); не смог прочитать новый <abbr>, который я добавляю. (возможно, он мог бы читать только <abbr>, который был добавлен до этой строки $("abbr.timeago").timeago();)

У кого-то есть идея, как его решить?

+0

Вы определяющую 'time', находящийся передано timeago() из add()? –

+0

привет @HartSimha спасибо за помощь! но да, это не проблема. – ldoroni

+0

Если вы нажмете на кнопку, чтобы вставить элемент с классом 'timeago' в DOM, этот элемент не будет существовать в точке, где выполняется '$ (" abbr.timeago "). Timeago();'. .. '$ (" abbr.timeago "). timeago();' будет выполняться при загрузке страницы и поэтому не будет нацелен на какие-либо элементы, если у вас уже нет «abbr.timeago» на странице загрузки страницы. –

ответ

0

Попробуйте удалить $ (документ) .ready (..) блок и вместо того, чтобы определить add() следующим образом:

function add() { 
    $('#ex').append($(timeago(time)).timeago()); 
} 

Как примечание стороны, это, вероятно, лучше, чтобы не дать глобальной функции совпадает с именем здесь используется метод jQuery. function timeago(.. может быть function newElFromTime(time)

Вы даже можете изменить его, чтобы вернуть объект JQuery, который вы вызовете метод .timeago() на вместо простого HTML строки:

function newTimeagoFromTime(time) { 
    isoTime = new Date(); 
    isoTime.setTime(time); 
    return $("<abbr class='timeago' title='"+isoTime.toISOString()+"'></abbr>").timeago(); 
} 

function add() { 
    $("#ex").append(newTimeagoFromTime(time)); 
} 
Смежные вопросы