2011-03-19 77 views
0

我有一個jQuery的功能,從列表中刪除一個文件,然後通過AJAX重新加載列表。jquery函數只觸發一次

它完美的工作......但只有一次。

 $(".delbutton").click(function(){ 
     var filename = $(this).attr("id"); 
     var info = 'pid=<?php echo $_GET["pid"]; ?>&f=' + filename; 
      $.ajax({ 
       type: "POST", 
       url: "deleteupload.php", 
       data: info, 
       success: function(){ 
        $('#filelist').load("files.php?pid=<?php echo $_GET["pid"]; ?>"); 
       } 
      }); 
    }); 

}); 

的HTML是

<div id="filelist"> 
    <img src='/images/cross.png' alt='delete' class='delbutton' id='OUCH.gif'>&nbsp;OUCH.gif<br> 

<img src='/images/cross.png' alt='delete' class='delbutton' id='xmas_tree.png'>&nbsp;xmas_tree.png<br> 
    </div> 

頁面上的其他jQuery函數繼續工作時,這一個不那麼它是不是jQuery的即碎。

有人會看到問題,我不能。

+0

@Steve - 控制檯中是否有任何錯誤? – Kit 2011-03-19 12:19:04

+0

奇怪的方式來分配一個id :) – naveen 2011-03-19 12:19:48

+0

你正在向PHP生成的jQuery代碼注入值? – Alnitak 2011-03-19 12:22:21

回答

3

問題在於,您綁定的元素與.delbutton匹配,但您將其替換爲$('#filelist').load調用。諸如click的標準結合功能與元件結合,而不結合選擇器

簡單的解決方法是使用livedelegate。我更喜歡delegate語法:

$('#filelist').delegate(".delbutton", 'click', function(){ 
    // your code here 
}); 

NB可能有更好的地方放一個文件名比id屬性...我建議使用一個data-url屬性來代替。 (請參閱data。)

+0

感謝你的理解,擁有rtfm,它看起來像解決方案,我學到了一些東西......除了...如果唯一的代碼我放在那裏有警報('測試');它不會觸發。根據手冊,您的(因此我的)語法看起來是正確的。我錯過了什麼嗎? – Steve 2011-03-19 23:06:02

+0

@Steve很難說,沒有真正看到你的代碼... – lonesomeday 2011-03-19 23:14:01

+0

HAH!委託在1.4.2中引入我正在使用1.3.x:P現在它可以工作。謝謝 – Steve 2011-03-19 23:21:31