【问题标题】:$(document).ready in ascx page after ajax callback$(document).ready 在 ajax 回调后的 ascx 页面中
【发布时间】:2025-12-16 12:55:02
【问题描述】:

我的这个设置有点问题,我有一个.ascx 文件列表,它们都在控制器本身的计算方面执行不同的任务。因此,在我的.aspx 页面上,我单击Ajax.ActionLink(),这将根据我单击的项目呈现特定的.ascx 文件。在 .ascx 中有 1-3 个将触发的事件,其中 2 个是 onclick 事件,1 个是 onloadonclick 事件更容易使用,因为我可以直接在控件事件中硬编码它,就像 onclick="$("#toggleMe3").slideToggle("slow");"onload 必须在加载 .ascx 时运行我正在测试这个$(document).ready(function(){}); 调用,这在 .aspx 页面中运行良好,但是一旦我尝试将其添加到 .aspx 页面中,它就不会加载并且它是理想的,但我不知道为什么不这样做。事实上,如果我直接插入.ascx 页面,脚本标签中的任何内容都不起作用,它们只有在硬编码到控件的事件中时才起作用,至少其中一些事件; onloadonprerender 不要触发。

【问题讨论】:

    标签: jquery asp.net-mvc ajax user-controls actionlink


    【解决方案1】:

    在 $(document).ready 中指定的部分回发脚本未执行后,我遇到了同样的问题。我在这里找到了解决方案MSDN - PageRequestManager Class

    看起来像添加如下脚本可以解决问题

    <script type="text/javascript">
      Sys.WebForms.PageRequestManager.getInstance().add_endRequest(myReadyFunction);
    </script>
    

    【讨论】:

      【解决方案2】:

      我已经成功地在通过 XHR 加载的部分中使用了 $(document).ready。您通过 XHR 加载的视图是否会引发 JavaScript 异常?还是它们包含格式错误的 HTML?

      我通常在通过 Ajax 加载的部分底部有我的 $(document).ready 方法,比如...

      <script type="text/javascript">
      $(document).ready(function(){ callMyFunction(); });
      </script>
      

      【讨论】:

      • 不幸的是,这对我不起作用,我将脚本标签添加到底部仍然没有运气。我使用 MicrosoftAjax.js 来控制 Ajax 调用,而不是 jquery ajax 函数。
      • 这对我有用,至少在 Windows XP 上的 FF3.5 和 IE7 中。但是我不明白为什么,因为 jQuery 文档没有处理这种情况......
      【解决方案3】:

      我很难理解你的问题......但它就是这样。

      如果您使用 AJAX 调用加载日期,$(document).ready() 事件将不会触发——因为页面已经加载。您现在只是在加载更多数据。

      如果您已经知道控件会显示什么,请预加载 JavaScript,但不要仅使用 click 事件处理程序进行绑定,而是使用实时处理程序。

      所以

      $("#myControl").click(....);
      

      变成

       $("#myControl").live("click", ....);
      

      对不起,如果这不是您要找的。

      【讨论】:

      • 如果页面不是动态加载的,是的。否则,您需要实时从 aspx 预加载事件处理程序。否则,您将不得不在客户端添加更多钩子以了解何时加载内容,以及调用加载的 javascript。