2010-01-15 85 views
0

我在這裏有兩個html。第一個是由php動態生成的,第二個只是html測試。無法刪除使用jquery動態創建的列表

我也有以下的jquery。

當我點擊第二個類中的類刪除(純html)時,它很好地工作。但是,當我點擊第一個中的十字架時,它不起作用。 它最終將#重定向到主頁。

我希望有人指出我做錯了什麼。

提前致謝。

HTML

First part (dyanmicall generated) 
<ul style="display: block;" id="message"> 
<li class="41"> 
<span class="user"><strong>shin</strong></span> 
<span class="msg"> delete this as well</span> 
<span class="date">2010-01-15 07:47:31</span> 
<a href="#" id="41" class="delete">x</a> 
    <div class="clear"></div></li> 
<li class="40"> 
<span class="user"><strong>shin</strong></span> 

<span class="msg"> delete me as well</span> 
<span class="date">2010-01-14 16:01:44</span> 
<a href="#" id="40" class="delete">x</a> 
    <div class="clear"></div></li> 
... 
...</ul> 


Second part which is plain html 
    <ul id="another"> 
    <li><a href="#">you can't delete me</a></li> 
    <li><a href="#" class="delete">delete this</a></li> 
    <li><a href="#" class="delete">delete this</a></li> 
    </ul> 

這裏是jQuery的

$(".delete").click(function(event) { 
    event.preventDefault(); 


loading.fadeIn(); 
var commentContainer = $(this).parent(); 
var id = $(this).attr("id"); 
// var string = 'id='+ id ; 

$.ajax({ 
    type: "POST", 
    url: "index.php/admin/messages/changestatus/"+id, 
    // data: string, 
    cache: false, 
    success: function(){ 
    commentContainer.slideUp('slow', function() {$(this).remove();}); 
    loading.fadeOut(); 
    } 

}); 


return false; 
    }); 

我使用笨的方式。

回答

0

你的代碼看起來應該可以正常工作。這意味着幾件事情之一是可能發生的:

  1. 你不必jQuery的正確加載,或者它加載,但在document.ready功能代碼ins't。
  2. 沒有定義其他項目之一(如loading),因此拋出JS錯誤,導致您的整個點擊事件失敗。

嘗試單擊Firebug的鏈接打開並查看是否在單擊鏈接時引發JS錯誤。

+0

它不會引發任何錯誤。看起來,我在codeigniter中的其他代碼是不正確的。謝謝你的幫助。 – shin 2010-01-15 07:39:09

1

當你這樣做:$(".delete").click(handler);你正在做的是發現存在於那個時候所有class="delete"和單擊處理程序綁定到他們,但這些動態的不存在,那麼,所以他們從來沒有得到該處理程序。

要解決此問題,請使用.live()以不同方式處理事件,它位於等待click冒泡的DOM的根部,並且如果點擊的目標與選擇器匹配,則該處理程序將執行......新老元素的泡沫以同樣的方式,所以當它加入:)

要使用.live()它並不關心,只需更換此:

$(".delete").click(function(event) { 

有了這個:

$(".delete").live('click', function(event) {