Javascript 如何仅在文档加载完成后加载jQuery函数

Javascript 如何仅在文档加载完成后加载jQuery函数,javascript,jquery,events,Javascript,Jquery,Events,奇怪的情况: 我正在使用jQuery和CSS构建一个菜单栏 在我的JavaScript文件中,我有一个on ready函数,如下所示: $(document).ready(function(e) { mark_active_menu(); } 而且 function mark_active_menu() { var elementWidth = $("nav li").width(); alert(elementWidth); } 出于某种原因,即使在all文档完成加

奇怪的情况:

我正在使用
jQuery
CSS
构建一个菜单栏
在我的JavaScript文件中,我有一个
on ready
函数,如下所示:

$(document).ready(function(e) {
    mark_active_menu();
}
而且

function mark_active_menu() {
    var elementWidth = $("nav li").width();
    alert(elementWidth);
}
出于某种原因,即使在all文档完成加载之前,我也会收到宽度不正确的警报消息。只有当我释放消息时,文档的其余部分才会加载,并且我得到了正确的宽度

为什么在所有文档加载完成之前调用我的函数? 是否有办法仅在某个元素完成加载后加载该函数(例如:
nav
元素)?

您可以使用,它将在所有资源完成加载后触发

$(window).load(function(e) {
    mark_active_menu();
});
加载事件在文档加载过程结束时激发。在 此时,文档中的所有对象都在DOM中,并且 图像和子帧已完成加载


当然,请尝试窗口
load

$(window).load(function(e) {
    mark_active_menu();
}

尝试窗口加载事件:

$(window).load(function() {
    //Stuff here
});

目前所有的解决方案都只是治标不治本。如果希望处理程序在所有ajax加载之后执行,那么可以使用承诺

var ajax1 = $.ajax();
var ajax2 = $.ajax();

jQuery(function($) {
    $.when.apply($, [ajax1, ajax2]).done(function() {
        // your code here
    });
});
之前(有时,在开始时不完全加载,在(0-200ms左右)几毫秒后):

之后:

$(window).load(function(){
$('body').delay(500).show(0);
});

在我使用AJAX和HTML的情况下。函数$(document.ready()和$(window.load()也有同样的问题。我通过将我的事件处理程序(应该在HTML文档中工作)添加到AJAX reguest完成后立即运行的jQuery函数中,解决了这个问题。阅读:(函数中的第三个参数)

在我的代码中,它如下所示:

var RequestRootFolderContent = function(){
    $.post(
        'PHP/IncludeFiles/FolderContent.inc.php',
        function(data){
            $('[class~="folder-content"]').html(data);

            //Here what you need
            $('[class~="file"]').dblclick(function(){
                alert("Double click");
            });
        }
    )
}

您是否使用ajax加载文档的某些部分?您可以连接到
$(窗口)。在('resize',fn)
$(窗口)上。在('load',fn)
上。此外,
ready()
方法不是传递给eventObject,而是传递给jQuery对象本身。是的,我有几个ajax部分,但它们不在我的$(文档)ready中function@BradM好,代码没有使用它,所以我们不知道它是否是一个没有意义的事件:)。选择器是
$(“nav li”)
…我看不到任何图像或帧…问题在于AJAX加载内容。@lan我的代码中有AJAX,但只有在用户触发后,文档才加载AJAXit@Lior因此,如果在用户触发页面之前没有任何内容放在页面上,那么
$(文档)将如何操作.准备就绪
是否在正确的时间执行?无论如何,
$(window.load)
不会对您的问题产生任何影响reason@lan$(窗口)。加载解决了我的问题。我确实认为,如果加载中涉及AJAX,那么您是对的。我真的很感谢你抽出时间!!这没有任何区别——问题在于AJAX加载内容。这没有任何区别——问题在于AJAX加载内容。其他答案没有考虑任何AJAX内容。AJAX请求可能在时间
窗口完成,也可能不完成。onload
触发。这是正确的答案。我想向上投票,但我没有更多的选票了:(谢谢,这非常有效。是否有任何方法可以让这更快发生?我需要在动态加载的div中替换文本,这很有效,只是有一点延迟。
var RequestRootFolderContent = function(){
    $.post(
        'PHP/IncludeFiles/FolderContent.inc.php',
        function(data){
            $('[class~="folder-content"]').html(data);

            //Here what you need
            $('[class~="file"]').dblclick(function(){
                alert("Double click");
            });
        }
    )
}