我有一个iframe,在iframe中出现了由ajax添加的dom元素。
使用$(“iframe”)。contents()。find()y可以访问并使用.remove()。html()。click()而不会出现问题。但我无法使用live();
绑定ajax添加的新元素的事件我的jquery代码:
$("#iframe_id").contents().find("a .tittle").live('click',
function(e)
{
//stuff
}
);
但是在新窗口和workinkg中查看iframe:
$("a .tittle").live('click',function(e)
{
//stuff
}
);
它有效......
任何想法????
感谢您的建议。
答案 0 :(得分:3)
find("a .tittle").live('click'
无论iframe如何,都无效。 live()
只能在直接选择器上调用,而不能来自find
之类的遍历方法。 Doc:
不支持DOM遍历方法来查找要发送到.live()的元素。相反,应始终在选择器
之后直接调用.live()方法
在我看来,这是一个糟糕的,误导性的界面设计,这就是为什么我建议在所有情况下优先使用delegate()
方法而不是live()
。
跨文档(进入iframe)事件处理也可能是一个问题。 jQuery并非真正用于与来自不同文档中的代码的文档进行交互。我建议将jQuery的副本加载到每个文档中,并完全在该文档的代码中处理事件和DOM操作。
答案 1 :(得分:2)
当您尝试将实时处理程序绑定到它时,可能是iframe内容未加载。尝试:
$("#iframe_id").load(function(){
$(this).contents().find("a .tittle").live('click', function(e){
//stuff
});
});
我认为这实际上不是问题所在。
查找要发送的元素不支持DOM遍历方法 为了活着()。相反,应始终调用.live()方法 直接在选择器之后,如上例所示。
这意味着您无法$('.something').find('.somethingElse').live(...);
。相反,你必须做$('.something .somethingElse').live(...);