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