JavaScript执行从函数声明开始,而不是从$(document).ready()开始
JavaScript execution beginning at function declarations rather than $(document).ready()?
我正在尝试为动态下拉菜单编写一个脚本,以此来学习OOP javascript和jQuery。你可以在www.industrialMerchants.com/industryMerchants/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
。
相关文章:
- 正在寻找比$(document).ready慢的$(window).load的替代方案
- jQuery document.ready not working
- 如何添加类,同时开始在文本字段中输入文本
- jQuery加载的async和ready函数不工作
- 希望日期开始结束于while循环中的一个房间id的一个数组
- ng模型内的ng重复的ng重复开始
- 在HTML/JavaScript中,有没有一种方法可以在图像开始加载时知道图像的最终布局尺寸
- 如何通过documents.ready函数中的javascript自动按键(ctrl+shift+i)
- Yii2从点击链接开始加载模式
- jQuery document.ready停止代码
- Jquery幻灯片以一行左侧的图像开始,但我希望它从右端开始
- 从REST服务器和Coffeescapet前端开始
- nodejs createReadStream从第n行开始
- 停止对document.ready函数的重定向/刷新
- 处理第三方库发送的ajax请求的开始和结束事件
- 从头开始创建XLS文件
- 在开始时隐藏FX.slide内容,而不是在单击后隐藏
- 拖动开始时更改可拖动元素的大小
- JavaScript执行从函数声明开始,而不是从$(document).ready()开始
- 尝试从谷歌翻译API开始使用并使用ready()