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");
});
}
)
}