Jquery live()内部iframe无法正常工作

时间:2011-09-01 09:07:44

标签: jquery

我有一个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
        }
    );

它有效......

任何想法????

感谢您的建议。

2 个答案:

答案 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
    });
});

我认为这实际上不是问题所在。

第二个想法

根据the live function docs

  

查找要发送的元素不支持DOM遍历方法   为了活着()。相反,应始终调用.live()方法   直接在选择器之后,如上例所示。

这意味着您无法$('.something').find('.somethingElse').live(...);。相反,你必须做$('.something .somethingElse').live(...);