jQuery - 将处理程序应用于插件加载页面后加载的元素

时间:2010-02-18 16:56:33

标签: jquery jqgrid

首先我已经阅读了Stackoverflow上的相关帖子,但我仍然卡住了。

我有一个使用自定义网格插件加载数据的页面。该数据需要在其中有一个链接,它将启动一个模态窗口(使用jqModal插件)。该窗口存在于html中,而不是由某个ajax调用检索。因此,如果我将事件处理程序附加到页面html中存在的链接,它可以正常工作。如果我将它应用于由此网格插件创建的链接,则它不起作用。

以下内容适用于html中已存在的链接,但不适用于插件生成的链接:

$(function() {     
var Foo = $('#Foo');
Foo.jqm({trigger: 'a.bar'});
});

我想我明白为什么这是我无法解决的问题。 live不会删除它,因为应该附加的事件是加载,而不是点击或jQuery 1.3.2允许的其他事件(不能使用版本1.4)。我认为bind可能是答案,但我无法让它发挥作用,我很确定这只是我“没有得到它”。

任何建议都表示赞赏,因为我已经对此持续了太长时间。

哦,我做的事情的一个例子弄清楚如何处理动态加载的数据:

$('body').click(function(event) {
           if ($(event.target).is('a.bar')) {
               $(event.target).toggleClass('baz');
            }
});

这将成功地将类“baz”添加到动态加载的链接“a.someLink”上(我认为我可以通过这种方式将触发器类添加到链接中,但无法弄清楚如何在加载时执行此操作而不是点击)但链接不会触发模态窗口,我不知道为什么。

编辑:我在自定义网格插件中添加了一个回调,但目前我使用以下内容来完成工作:

$( '.someclass' ).animate( {opacity: 1}, 2000, function(){
            Foo.jqm({trigger: 'a.bar'});
});

哈金,但它在紧要关头做了诀窍。

3 个答案:

答案 0 :(得分:1)

您需要在加载动态内容时运行的某种回调。

如果jqm是jQueryModal,我相信有一个onLoad回调:

$('#dialog').jqm({
    onLoad:function() {
        // content is loaded?
        console.log(!!$('.bar').length); // true if .bar exists
    }
}); 

答案 1 :(得分:1)

你可以创建一个函数,然后在加载东西后在ajax调用期间调用它。

function setEvent()
{
var Foo = $('#Foo'); 
Foo.jqm({trigger: 'a.bar'}); 
};

和ajax

success: function(msg)
            {
                Loadstuff(msg);
              setEvent();
            }, 

答案 2 :(得分:0)

使用livequery插件。我为仍在寻找解决方案的人写这篇文章。 它会在每次ajaxcall之后触发查询/函数。

见这里: http://docs.jquery.com/Plugins/livequery