javascript
  • jquery
  • dom
  • 2011-08-22 81 views 3 likes 
    3

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

    我正在使用一些3 rd派对工具(Telerik's grid),并设置了一个客户端模板来显示一个复选框,就像this一样。代码:

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

    的原因,我想问的是,我试图将事件挂钩到所有复选框监测change

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

    我手动把复选框Telerik的电网之外代码,它挂钩到复选框更改,但没有一个复选框内的电网做...

    而在那种情况下 - 是否有工作?

    +1

    过去曾与Telerik合作过,看起来他们在页面加载后添加了DOM元素,所以'.live()'应该可以正常工作。 –

    回答

    4

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

    你有几个选择:

    1. ,可以看到被第三方库后触发创造它的HTML,从而复选框现在存在,然后使用场景下的传统jQuery的挂钩到他们的事件。
    2. 您可以使用jQuery中的.live()功能捕获甚至DOM对象的事件,这些事件在您指定要连接它们时尚未存在。你可以在这里阅读.live()http://api.jquery.com/live/。它的工作原理与普通的事件处理程序相似,只是它仅适用于某些事件,并且在如何停止传播方面存在一些差异。
    8

    尝试用活,

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

    编辑

    .live()已过时形式的版本1.7,自1.9版本被删除: 而是现场使用on()

    +1

    以下是为更好地理解而生活的文档:http://api.jquery.com/live/ – Rumplin

    +0

    只是要小心,.live()已从1.7版弃用,并从版本1.9开始删除:[api.jquery.com /live](http://api.jquery.com/live/) – betatester07

    +0

    @ betatester07感谢您的信息。我已经更新了答案。 –

    相关问题