【问题标题】:jQuery $(document).ready(function()jQuery $(document).ready(function()
【发布时间】:2010-12-11 05:46:36
【问题描述】:

场景如下。

在父页面上,我们有一个带有 id 和名称“placeHolder”的 div 标签。

  • 第 1 步:“placeHolder”通过 ajax 调用填充 Page1 内容。
  • 第 2 步:“placeHolder”通过 ajax 调用填充 Page2 内容。
  • 第 3 步:“placeHolder”再次通过 ajax 调用填充 Page1 内容。

当页面第一次加载时 $(document).ready(function() 被调用,但是从第 3 步开始,ready 函数没有被调用。

任何方向都将不胜感激。

【问题讨论】:

  • 你应该添加一些你的javascript代码以获得更好的解决方案。

标签: jquery


【解决方案1】:

我认为您是在暗示通过 ajax 调用注入 div 的元素正在失去其事件处理程序。如果是这种情况,您将需要使用live 委托这些事件或将它们重新绑定到您的ajax 方法的success 回调中的元素。 $(document).ready() 块只会在页面第一次加载时执行。

例如,通过 ajax 调用替换的元素之一是带有 class="something" 的锚点:

$('a.something').live("click", function() {
    alert('hello');
});

以上将确保当通过 ajax 调用替换锚点时,点击处理程序仍将执行。

【讨论】:

    【解决方案2】:

    你应该在你的ajax调用中使用complete回调

    【讨论】:

      【解决方案3】:

      $(document).ready(...)在文档加载时调用:如果您通过 Ajax 加载内容,则该事件只会在页面第一次加载时触发。因此,您最好按照karim79 的建议并使用live 或您的Ajax 方法的成功回调。

      【讨论】:

        【解决方案4】:

        我的理解是 $(document).ready) 仅在浏览器完成网页的初始 GET 时才会调用。

        如果你想触发一个函数,那么你可以在你的 Ajax 调用中使用成功回调。

        【讨论】:

          【解决方案5】:

          “第一次加载页面时 $(document).ready(function() 被调用,但从第 3 步开始,ready 函数没有被调用” - 假设 1-3 是在初始页面加载时按顺序执行。所以,是的 - 这是对其工作方式的有效描述。

          $(document).ready() 是一个事件处理程序 - 换句话说:文档已准备好被访问并且脚本已完成加载。其他事件发生在这之后(和之前,但为了这个目的,jQuery 在准备好时就“准备好了”。

          仅供参考,以下也是有效的:

          function myOnLoaded()
          {
             // do my load thing here
          }
          
          $(document).ready(myOnLoaded);
          

          这会在事件(就绪)触发时调用 myOnLoaded。

          【讨论】:

            【解决方案6】:

            上面关于 $(document).ready 不起作用的原因的答案是正确的。

            但是 $(document).live 在 jquery 1.9 中已被弃用 http://jquery.com/upgrade-guide/1.9/#live-removed

            相反,您应该使用 $(document).on 此处的文档:http://api.jquery.com/on/

            function myOnLoaded()
            {
               // do my load thing here
            }
            
            $(document).on("click", "a.something", myOnLoaded) 
            

            【讨论】:

              猜你喜欢
              • 2018-11-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-04-01
              • 2011-05-22
              • 2020-12-15
              相关资源
              最近更新 更多