我正在尝试为动态下拉菜单编写脚本,以此学习OOP javascript和jQuery。您可以在www.industrialMerchants.com/industrialMerchants处看到虚拟网站。脚本可以在www.industrialMerchants.com/industrialMerchants/javascript/horizontalDropMenu2.js
该脚本首先定义了一些对象,之后我有一个$(document).ready()
封闭器,用于启动将相关jQuery对象和DOM元素封装到我的对象模型中的过程。
的问题是,当我加载作为一个虚拟网站的静态html文件,萤火虫给我下面的错误:
"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()
声明开始的代码中插入断点时,执行完全跳过它,并从函数声明本身开始。就好像浏览器正在尝试执行函数声明,然后进行任何明确的调用。
你为什么要设置'this.this'? – Blender
不知道发生了什么,但你几乎肯定应该用'var'声明“self”。与其他功能中的“菜单”和“菜单”一样。 – Pointy
Blender在哪里看到? –