多个jQuery .ready() – 附加到现有的事件处理程序而不是创建另一个
假设我有一个链接到两个脚本的HTML:
... ...
这两个脚本中的每一个都有自己定义的jQuery的.ready()
。
general.js:
jQuery(function() { var foo; $('#btn').click(function() {alert(foo())}); }
home_specific.js: “[pagename] _specific.js”的示例
jQuery(function() { foo = function() {alert("hello")}; }
其中#btn
是一个按钮元素。
“general.js”是由多个页面共享的脚本,而每个页面都有专用的“[pagename] _specific.js”,用于定义分配给foo
的函数的行为方式。
当我点击#btn
我希望看到“hello”对话框,但相反,我得到了Uncaught TypeError: undefined is not a function
chrome开发人员工具中的Uncaught TypeError: undefined is not a function
。 从这个SO问题 ,我理解这是因为两个.ready()
有两个独立的事件处理程序。
问题: “[pagename] _specific.js”中的.ready()
附加到“general.js”中的.ready()
的事件处理程序,而不是定义另一个匿名函数?
脚本中实际发生的事情与您的想法不同。
在下面的:
jQuery(function() { var foo; $('#btn').click(function() {alert(foo())}); }
你已经通过在它前面键入var来创建foo的本地副本。 在这种情况下,foo是未定义的。
在下面的:
jQuery(function() { foo = function() {alert("hello")}; }
您实际上已经创建了名为foo的全局可访问函数。 但是在调用之前不会执行。 但是在第一个脚本中,您尝试调用它。 但实际发生的是你的脚本尝试使用自己的本地定义的变量foo,它是未定义的。
以下是我会做的
// general.js: jQuery(function() { $('#btn').click(function() { foo(); }); }); // home_specific.js var foo = function() { alert("hello"); };
好吧,我希望这有帮助!! 希望你明白发生了什么!