DOM没有满载?

当使用jQuery文档时,即$(document).ready(function() { }是否有可能DOM尚未完全加载?

我正在使用一些第三方工具(Telerik的网格)并设置了一个客户端模板来显示一个复选框,就像这样 。 码:

 .ClientTemplate("<input type='checkbox' name='checkedRecords' value='' />") 

我问的原因是我试图将事件连接到所有复选框以监视change

 $(':input').change( function () { alert('you fired!'); }); 

我在Telerik网格代码之外手动设置了一个复选框,它连接到复选框更改,但telerik网格内的所有复选框都没有…

在那种情况下 – 是否有解决方法?

HTML页面中静态定义的DOM不可能在$(document).ready()加载。 但是,如果您正在使用动态加载或创建HTML的第三方库,则无法保证库在$(document).ready()时已经完成了它的业务。 事实上,它很可能没有。

你有几个选择:

  1. 您可以找到在第三方库创建HTML之后触发的事件,因此现在存在复选框,然后使用传统的jQuery来连接它们。
  2. 您可以使用jQuery中的.live()function捕获甚至在您指定要连接它们.live()不存在的DOM对象的事件。 你可以在这里阅读.live() : http : //api.jquery.com/live/ 。 它主要像普通事件处理程序一样工作,只是它只适用于某些事件,并且在如何停止传播方面存在一些差异。

尝试使用直播,

 $(':input').live('change', function() { alert('you fired!'); }); 

编辑

.live()已从1.7版本中弃用,自版本1.9起被删除:而是在()上实时使用