我无法将模态窗口函数绑定到某些返回的数据。我正在使用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));
}
答案 0 :(得分:1)
这种情况正在发生,因为插件会在页面加载时绑定事件处理程序,然后您在事后添加动态内容到页面。最简单的解决方案是将您拥有的任何代码移动到一个函数中,并在页面加载时调用一次,并在添加新链接时再次调用它。如果它开始双重绑定现有的链接,那么你必须给动态链接一个不同的类,并为该类第二次实例化。
修改强>:
这里似乎有一些误解,所以我会进一步解释:
jQuery live
功能(您用于.deleteThis
)旨在解决您遇到的问题。您可能已经知道这一点,因此您正在使用它。上段是因为我相信你所说的是你返回的DomWindow edit
链接并没有像你期望的那样打开DomWindow。这是因为DomWindow在内部不使用live
来绑定事件。因此,当您最初在页面加载时实例化DomWindow时,链接会被绑定,但新链接不会。如果你愿意编辑插件的源代码,你可以通过简单地使用live
直接修复它,但是将代码移动到一个函数并调用它更容易(尽管不是“干净”)每当您向页面添加更多内容时。