我使用jQuery在$(document).ready()处理程序中附加一些插件 - 例如$(“。date”)。datepicker )。然而,当我使用$(“... html ...”),例如从$ .ajax(..,success(data){})或ajaxForm({target:...})加载内容时, ,document.ready()显然不会被调用。更新:如指出它是调用,但我仍然不知道部分/元素被加载。
我不能再做ready(),因为它会再次将插件重新连接到已有的元素。因此,我必须在每种情况下手动执行此操作,例如,我成功(数据){item = $(data); initDatePickerEtc(项目); }。
有没有更好的方法?
有Live Query插件可以处理事件。有什么可以让我跟踪HTML元素的创建并执行操作吗?像
$.oncreation(".date", function() { $(this).datepicker(); });
// or at least
$.oncreation(function() { $(this).find(".date").datepicker(); });
大的东西,如果它也将处理现有的元素...像实况查询工作在点击()调用的时候都存在,而未来创建的元素。
请注意,我会很高兴跟踪由jQuery创建的元素。所以它可能是jQuery为它的html()函数提供了扩展点,我猜。现在,从jQuery源也没有:
html: function(value) {
return value === undefined ?
(this[0] ?
this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
null) :
this.empty().append(value);
},
也许,如果我取代HTML(),使得即使3-第三方插件(比如给ajaxForm)会用我的版本(这将触发$ .creation回调),而不是默认的jQuery的一个...它会工作吗?这种方法存在问题 - 它不仅仅是html(),还有append()等等,只有当$(“”)的结果被附加到文档时,才能获得事件。因为当它在内存中时,我不需要datepicker()。
我将需要从那里获得对加载部分的引用。如果我做$(document).ready(function(){$(“*”).css('background-color','red');});在加载的部分,整个页面将变成红色而不是仅加载的div。 – queen3 2009-10-19 20:09:10
是的。我解决了这个问题,通过在元素中添加一个类并在再次执行时进行筛选:$('*')。not('。doneAlready')。css(...)。addClass('doneAlready'); – 2009-10-19 20:13:07
好的方法,并将工作,+1。我想知道在全局数组中跟踪它是否更好 - 我实际上关心的是大页面并将类添加到每个元素中......看起来像一个黑客。所以我希望有更清晰的方法。但如果没有人认为我必须接受这个解决方案。 – queen3 2009-10-19 20:20:49