是否可以确定何时使用JavaScript呈现元素?

是否有jQuery等效于执行以下操作:

$(document).ready(function() { 

对于一个元素:

 $(a).ready(function() { 

我在updatepanel中有内容,我在一些锚元素上调用jQuery UI的.button()。 更新updatepanel后,锚点将被重新呈现并丢失UI样式。

我已经知道如何使用.NET AJAX的add_endrequest(处理程序)检测ajax请求的结束,但是希望使用jQuery.delegate提供更简洁的解决方案。

例如

 $('body').delegate('#mybutton', 'load', (function(){ //this doesnt work... } 

如果我正确理解您的要求,一种方法是使用Live Query插件。

实时查询…能够在匹配新元素时触发函数(回调),并在元素不再匹配时触发另一个函数(回调)

例如:

 $('#someRegion a').livequery( function(){ do_something(); }); 

更新:由于DOM更改没有通过jQuery运行,不幸的是,livequery没有看到它们。 我之前仔细研究过这个问题,并在这个答案中考虑了基于轮询的解决方案。


更新:轮询有点难看,但如果真的没有其他选择,这里有一个基于轮询的解决方案,它使用jQuery“虚拟”操作来使livequery“看到”变化。 你只想将这样的东西视为最后的手段 – 如果没有选择与回调方法相结合。

首先,设置livequery,观察将发生更新的容器:

 $('div#container').livequery( function(){ $(this).css('color','red'); // do something }); 

然后使用setInterval() ,这里包含一个方便的函数:

 function pollUpdate( $el, freq ){ setInterval( function(){ $el.toggleClass('dummy'); }, freq); }; 

所以你可以:

 $(document).ready( function(){ pollUpdate( $('div#container'), 500 ); }); 

这是一个有效的例子 。 单击按钮以添加没有jQuery的新DOM元素,您将看到它们被拾取(最终)并由livequery重新设置。 不漂亮,但确实有效。

您可以轻松跟踪网页中任何元素的加载情况。

$(function(){$("#ele_id").bind("load", function () { alert('hurray!') });})
$(function(){$("#ele_id").bind("load", function () { alert('hurray!') });}) 

有关更多详细信息,请参阅此主题: jQuery如何使图像在加载时淡入?

elementReady:一个jQuery插件

你在试图解决错误的问题吗? 如果只是样式:尝试在标题中添加css,以便更新不会影响样式。 注意:根据您对这些示例的问题,您的选择器不完全确定。

 $('head').append(''); 

要么

 $('').appendTo($('head')); 

如果您确实需要某些事件管理,则应该能够使用上下文来使用委托。 请参阅此处的说明: http : //brandonaaron.net/blog/2010/03/4/event-delegation-with-jquery

 $('body div').delegate('a', 'change', function(event) { // this == a element $(this).addClass(class here); }); 

或带链

 $('body').children('div').delegate('a', 'change', function(event) { // this == a element $(this).addClass(class here); }); 

现在获得真正的答案,因为您可以访问该事件,您可以使用pageLoad函数将其直接添加到您的页面; 添加这个:

 function pageLoad(sender, args) { if (args.get_isPartialLoad()) { //jQuery code for partial postbacks can go in here. } } 

在2018年更新,你可以使用新的MutationObserver API,这里只是一个插件:

 (function($, ready) { $.fn.ready = function(callback) { var self = this; callback = callback.bind(self); if (self[0] == document) { // it will return false on document ready.call(self, callback); } else if (self.length) { console.log('length'); callback(); } else { if (!self.data('ready_callbacks')) { var callbacks = $.Callbacks(); callbacks.add(callback); var observer = new MutationObserver(function(mutations) { var $element = $(self.selector); if ($element.length) { callbacks.fireWith($element); observer.disconnect(); self.removeData('ready_callbacks'); } }); observer.observe(document.body, { childList: true, subtree: true }); } else { self.data('ready_callbacks').add(callback); } } return self; }; })(jQuery, jQuery.fn.ready); 

限制是它只适用于jQuery的基本使用,字符串作为CSS选择器。

如果你不需要与build in ready相同的名字,你可以使用不同的名称并删除ready.call(self, callback);