2011-03-19 100 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