2014-12-04 98 views
0

我有這個來源,寫的時間以前。 (我用的jQuery插件TIMEAGO)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'正接受從add()中傳遞給timeago()? – 2014-12-04 08:19:24

+0

嗨@HartSimha感謝您的幫助!但是,這不是問題。 – ldoroni 2014-12-04 08:23:22

+0

如果您依靠單擊按鈕將具有類'timeago'的元素插入到DOM中,則此元素將不會在執行'$(「abbr.timeago」)。timeago();'的位置存在。 ..'$(「abbr.timeago」)。timeago();'將在頁面加載時執行,因此不會定位任何元素,除非頁面加載頁面上已經有「abbr.timeago」 – 2014-12-04 08:48:54

回答

0

嘗試刪除$(文件)。就緒(..)塊,而是定義add()如下:

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

作爲一個側面說明,它可能是最好的避免給全局函數的名稱相同這裏使用了一個jQuery方法。 function timeago(..可能是function newElFromTime(time)

你甚至可能修改它返回您調用.timeago()方法,而不是一個普通的HTML字符串jQuery對象:

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

function add() { 
    $("#ex").append(newTimeagoFromTime(time)); 
}