0

我正在尝试为动态下拉菜单编写脚本,作为学习 OOP javascript 和 jQuery 的一种方式。您可以在www.industrialMerchants.com/industrialMerchants查看虚拟网站。该脚本可在www.industrialMerchants.com/industrialMerchants/javascript/horizo​​ntalDropMenu2.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(),执行完全跳过它,并从函数声明本身开始。就好像浏览器在对它们进行任何显式调用之前尝试执行函数声明。

4

1 回答 1

3

设置断点并向上调用堆栈给了我这一行(外部.ready- 但没关系):

Submenu.prototype = new Menu();

您正在创建一个没有jQuery 对象但使用的菜单实例undefined

于 2012-08-22T22:24:14.703 回答