0

假设我有一个链接到两个脚本的 HTML:

...
<script type="text/javascript" src="general.js"></script>
<script type="text/javascript" src="[pagename]_specific.js"></script>
...

这两个脚本中的每一个都定义了自己的 jQuery .ready()

一般.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 开发人员工具。从这个 SO question,我明白这是因为两者.ready()有两个独立的事件处理程序。

问题:有什么方法可以将.ready()in "[pagename]_specific.js" 附加到.ready()in "general.js" 的事件处理程序中,而不是定义另一个匿名函数?

4

1 回答 1

0

您的脚本中实际发生的事情与您的想法不同。

在下面的:

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");
};

好吧,我希望这有帮助!希望你明白发生了什么!

于 2012-09-28T01:29:32.877 回答