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

11 javascript asp.net jquery updatepanel jquery-ui

有一个jQuery等效于执行以下操作:

$(document).ready(function() {
Run Code Online (Sandbox Code Playgroud)

对于一个元素:

$(a).ready(function() {
Run Code Online (Sandbox Code Playgroud)

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

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

例如

$('body').delegate('#mybutton', 'load', (function(){  //this doesnt work... }
Run Code Online (Sandbox Code Playgroud)

Ken*_*ler 0

如果我正确理解您的要求,一种方法是使用实​​时查询插件。

Live Query ...能够在匹配新元素时触发一个函数(回调),并在元素不再匹配时触发另一个函数(回调)

例如:

$('#someRegion a').livequery( function(){ 
  do_something();
});
Run Code Online (Sandbox Code Playgroud)


更新:由于 DOM 更改不是通过 jQuery 运行,不幸的是 livequery 没有看到它们。我之前考虑过这个问题,并在这个答案中考虑了基于轮询的解决方案。
更新:轮询有点丑陋,但如果确实没有其他选择,这里有一个基于轮询的解决方案,它使用 jQuery“虚拟”操作使 livequery“看到”更改。如果没有选项可以绑定到回调方法,您只想考虑将这样的方法作为最后的手段。

首先,设置 livequery 来监视将发生更新的容器:

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

然后使用setInterval(),这里封装在一个便利函数中:

function pollUpdate( $el, freq ){
  setInterval( function(){
    $el.toggleClass('dummy');
  }, freq); 
};
Run Code Online (Sandbox Code Playgroud)

所以你可以拥有:

$(document).ready( function(){
  pollUpdate( $('div#container'), 500 );
});
Run Code Online (Sandbox Code Playgroud)

这是一个工作示例。单击按钮即可添加新的 DOM 元素,无需使用 jQuery,您将看到它们(最终)被 livequery 拾取并重新设置样式。不漂亮,但确实有效。