jQuery .getJSON函数需要重新绑定返回的数据

时间:2009-04-21 18:47:24

标签: php javascript jquery

我无法将模态窗口函数绑定到某些返回的数据。我正在使用Cody Lindy的http://swip.codylindley.com/DOMWindowDemo.html">Jquery.DomWindow插件。请注意,除了这个问题,一切正常。

当我从jQuery.getJSON调用返回的数据包含一个应该打开模态窗口的链接时,会出现问题。但是,该链接不被DOM识别,因此不受任何功能的约束。

我的jQuery功能是:

$(".deleteThis").live("click", function(){
    var $this = $(this);

    $.getJSON(this.href, function(data) {
        if( data.success == '1') {
        $this.parent().html('<span style="background:#f1ffd6;padding:5px;">' +data.msg+'</span>');         
        } 
        else if( data.success == '2') {
        $this.parent().html('<span style="background:#f1ffd6;padding:5px;">' +data.msg+'</span>');         
        }      
        else {alert("Failure (most likely our fault).");}
    });

    return false;
});

jQuery发送的php脚本包含一些数据库脚本(下面未显示,因为它不相关)。返回JSON数组的相关php代码是:

if($del ==1 ){
    $msg= "$name has been deleted. (<a href='media/delete_coll.php?cid=$cid&delete=0' class='deleteThis' >undo</a>)";
    print json_encode(array("success" => 1,"msg" => $msg));
}

if($del ==0 ){ 
    $msg= "$name <a href='media/editCollab.php?coll=$coll_id' class='absoluteIframeDOMWindow'>edit</a> 
     <a href='media/delete_coll.php?cid=$coll_id&delete=1&coll=$coll' class='deleteThis' > delete</a> | 
     Collaborator has restored.";
     print json_encode(array("success" => 2, "msg" => $msg));
}

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为插件会在页面加载时绑定事件处理程序,然后您在事后添加动态内容到页面。最简单的解决方案是将您拥有的任何代码移动到一个函数中,并在页面加载时调用一次,并在添加新链接时再次调用它。如果它开始双重绑定现有的链接,那么你必须给动态链接一个不同的类,并为该类第二次实例化。

修改

这里似乎有一些误解,所以我会进一步解释:

jQuery live功能(您用于.deleteThis)旨在解决您遇到的问题。您可能已经知道这一点,因此您正在使用它。上段是因为我相信你所说的是你返回的DomWindow edit链接并没有像你期望的那样打开DomWindow。这是因为DomWindow在内部不使用live来绑定事件。因此,当您最初在页面加载时实例化DomWindow时,链接会被绑定,但新链接不会。如果你愿意编辑插件的源代码,你可以通过简单地使用live直接修复它,但是将代码移动到一个函数并调用它更容易(尽管不是“干净”)每当您向页面添加更多内容时。