我正在尝试为动态下拉菜单编写脚本,作为学习 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()
,执行完全跳过它,并从函数声明本身开始。就好像浏览器在对它们进行任何显式调用之前尝试执行函数声明。