首先我已经阅读了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'});
});
哈金,但它在紧要关头做了诀窍。
答案 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之后触发查询/函数。