【发布时间】:2012-08-18 09:54:44
【问题描述】:
我正在尝试为动态下拉菜单编写脚本,作为学习 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() 声明开始的代码中时,执行会完全跳过它,并从函数声明本身开始。就好像浏览器在对它们进行任何显式调用之前尝试执行函数声明。
【问题讨论】:
-
你为什么要设置
this.this? -
不确定发生了什么,但您几乎可以肯定应该使用
var声明“自我”。与其他功能中的“菜单”和“菜单”相同。 -
你在哪里看到的,Blender?
标签: javascript jquery oop function