gpt4 book ai didi

JavaScript 执行从函数声明开始,而不是从 $(document).ready() 开始?

转载 作者:行者123 更新时间:2023-11-28 20:52:57 25 4
gpt4 key购买 nike

我正在尝试为动态下拉菜单编写一个脚本,作为学习 OOP javascript 和 jQuery 的一种方式。您可以在 www.industrialMerchants.com/industrialMerchants 看到虚拟站点。 。该脚本可以在 www.industrialMerchants.com/industrialMerchants/javascript/horizontalDropMenu2.js 找到。

脚本首先定义了一些对象,然后我有一个 $(document).ready() ,它带有一个闭包,旨在启动将相关 jQuery 对象和 DOM 元素包装到我的文件中的过程。对象模型。

问题是,当我加载作为虚拟网站的静态 html 文档时,Firebug 给出以下错误:

"TypeError: jqObject is undefined."

错误指向以下函数的第五行。

function Menu(jqObject) {
self = this;
this.self = jqObject;
this.submenus = (function(){
jqObject.children().children("ul").each(function() { <<--- Error
submenu = new Submenu($(this), self);
submenus.push(submenu);
return submenus;
});
}());
}

调用该函数的行位于此处:

$(document).ready(function(){ 
menus = new Array();
$("ul.horizontalDropMenu").each(function(){
menu = new Menu($(this));
menus.push(menu);
});
});

如您所见,对 Menu() 对象构造函数的调用包括对 jQuery 对象的引用作为参数,因此明确定义了 jqObject。那么什么给出了呢?

当我在从 $(document).ready() 声明开始的代码中插入断点时,执行完全跳过它,并从函数声明本身开始。就好像浏览器在对函数进行任何显式调用之前尝试执行函数声明一样。

最佳答案

设置断点并向上调用堆栈给我这一行(在 .ready 之外 - 但这并不重要):

Submenu.prototype = new Menu();

您正在创建一个菜单实例,没有 jQuery 对象,而是使用undefined

关于JavaScript 执行从函数声明开始,而不是从 $(document).ready() 开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12082211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com