【问题标题】:jQuery event wait until the data gets loaded in pagejQuery事件等到数据加载到页面中
【发布时间】:2014-12-11 13:32:14
【问题描述】:

我正在使用$("div").load(url) 事件在页面中加载我的部分视图。这样页面就会渲染得更快。但是有了这个$(document).ready,甚至在内容加载之前就被解雇了。 我也尝试过$(window).load,但这甚至在内容加载之前也会被触发。

您能否建议一种方法,等待数据加载完毕,然后只执行我的 javascript 函数。

【问题讨论】:

  • 这里有什么问题? $(document).ready 必须在您调用 load() 之前触发 - 否则您更新的 div 元素将无法访问。
  • 我的问题是我必须在加载整个页面数据后触发一个方法。我在子 JS 的 document.ready 中隐藏了几个控件,因为 document.ready 在我的数据加载之前被触发,它无法在 DOM 中找到这些控件。请提出解决方案。最后,我想根据从服务中获得的数据隐藏一些控件。
  • 听起来你需要使用委托事件。

标签: javascript jquery html performance


【解决方案1】:

当您使用 $("div").load(url) 时,您正在异步加载 url 内容。 这意味着首先初始化 document.load,然后对 load(url) 进行异步调用。

将所有初始化 Javascript 放在一个函数中(比如说 myinit() )并在成功回调您的加载方法时触发它 例如

// this line keeps all your function in one global name space and you can extend it multiple times in same document or js files
var myapp = myapp||{}; 
$(function(){
    // Here you are extending your myapp object with custom init function
    myapp.init = function(){
        //your init code here
    }

    //your ajax content load here
    $('div').load(url,function(){
        //Here you call it
        myapp.init();
    })
})

附:您始终可以在 jQuery exec 块中的任何位置使用 myapp.init() 在控制台中测试您的自定义方法

【讨论】:

  • 好主意,但我的加载方法在循环和父 JS 中,我无法访问子 JS 文件中的“myapp”变量。
  • 然后在 jquery.js 之后定义 myapp ,然后是你的代码。
  • 将答案标记为正确,以便对遇到相同问题的人有用:)
猜你喜欢
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多