2013-04-11 94 views
0

我的簡單腳本通過jquery添加了一些元素。
即時消息試圖做的是爲這些創建的元素添加一些Ajax調用。
問題是事件從來沒有爲這些元素工作,我嘗試了很多Jquery方法,但都失敗了。
使用jquery dyanmic創建的元素?

$("#currentbuild").append('<li class="cancelevent"></li>'); 
$('.cancelevent').bind("click",function(e) { 
         var eventid = $(this).attr('id'); 
         e.preventDefault(); 
         alert(eventid); 
       }) 

還我試圖

$("#currentbuild").append('<li class="cancelevent"></li>'); 
$('.cancelevent').on("click",function(e) { 
         var eventid = $(this).attr('id'); 
         e.preventDefault(); 
         alert(eventid); 
       }) 

但它從來沒有出現什麼

+0

需要委託.on,有人會很快給你代碼,我得下班 – Huangism 2013-04-11 21:04:24

回答

1

你幾乎正確的:

$("#currentbuild").append('<li class="cancelevent"></li>'); 
$('#currentbuild').on("click",".cancelevent",function(e) { 
    var eventid = $(this).attr('id'); 
    e.preventDefault(); 
    alert(eventid); 
}); 

這增加了click處理程序#currentbuild(其不是動態的,因此總是在DOM中)。但是,它不僅僅會響應點擊自身,而只會聽取自身內部的點擊,而只聽取類別爲cancelevent的元素。而且,由於您不會將點擊處理程序添加到可以動態添加和/或刪除的元素,處理程序將始終存在。

編輯:@tcovo在下面的評論中指出,你的代碼應該像你在這裏發佈一樣工作。我認爲這不完全是你的代碼,並且append是由另一個事件處理程序動態發生的(而不是像你在示例中建議的那樣在頁面加載時)。

此外,var eventid = $(this).attr('id');不會在你的榜樣工作,要麼,因爲在<li>沒有id屬性...我認爲這另一個原因是不是正在給你的麻煩確切的代碼。 :)

+1

史蒂夫是正確的。 Live過去與整個文檔相關,但是範圍僅限於你的語法中與它相關的元素。通過手動插入或AJAX將東西添加到DOM中的位置,您必須退出到要更改/插入的元素的外殼容器,並將其用作選擇器的基礎。 – 2013-04-11 21:06:38

+0

爲什麼我們需要在這種情況下委託事件?在'.append'被調用之後,DOM中不應該存在'$('。cancelevent')'? – tcovo 2013-04-11 21:09:39

+0

@tcovo - 我同意,在這種情況下,它應該工作。我假設這不是OP正在使用的確切結構,並且附加地在某處動態地發生。 – Steve 2013-04-11 21:10:49