我有一个文件notifications.js
,其中包含一个绑定到元素的事件和一个函数updateNotification()
。当JSON对象作为参数传递时,此函数使用jQuery更新页面上的某些元素。
问题:
我试图在页面中调用此函数(通过<script>
标签),但是不是调用它,而是打破了页面。我在Chrome开发者控制台中进行了一些挖掘(不确定名称),并标记了错误:
/pleaseshare/views/install/:50 Uncaught ReferenceError:updateNotification is not defined
但是,当我在控制台中平移时,我可以清楚地看到脚本下列出的文件notifications.js
,并在那里定义了该功能。如果我在当前范围内定义函数(例如调用上方的行),它可以正常工作。
我尝试了什么
该函数包含一些需要jQuery的javascript,因此我尝试使用和不使用$(document).ready( function() {});
包含它,但似乎没有任何影响。
我很难过。
为了更好地衡量,这里有一个显示我的javascript和html结构的链接:http://snippi.com/s/znk6xe9
任何帮助,找出为什么会发生这种情况,或解释为什么javascript函数不能被称为跨文件(虽然我希望不是这种情况),将不胜感激;)!!
答案 0 :(得分:1)
除非在尝试调用它之前在同一文件中定义或加载了一个函数,否则无法调用该函数。
除非函数与试图调用它的范围相同或更大,否则无法调用该函数。
您的代码看起来像结构应该工作,但显然是一个简化的测试用例已经减少到不会的程度。
答案 1 :(得分:1)
搞定了。问题肯定是多方面的,但我明白了。
首先使用RequireJS对updateNotification()
产生了影响,因为它不能被称为跨文件,因此被认为是未定义的。我假设这是因为RequireJS如何加载文件,我稍后会查看文档(如果发现任何相关内容,则发布编辑)。
其次,当{jinc的DOM就绪加载器updateNotification()
中包含$(document).ready(function(){})
时,updateNotification()
将被视为未定义。但是$(document).ready(function(){})
包含需要jQuery的执行,所以我必须在{{1}}中包含函数的内容。
这是RequireJS / jQuery非常独特的问题,因此在大多数用例中都不会发生这种情况。
旁注:编辑标签以反映这一点。
答案 2 :(得分:0)
您需要将脚本导入页面:
<script type="text/javascript" language="javascript" src="path/to/notifications.js"></script>
这需要添加 调用<script>
的{{1}}标记
答案 3 :(得分:0)
不需要在同一个文件中声明函数。实际上,避免将所有声明转储到全局命名空间中通常是JavaScript中的一个问题。
在您提供的链接中的示例代码中,updateNotification
被声明为全局,因此不应存在范围问题。
但是,在同一示例中,您不会显示包含的notifications.js。您需要使用<script></script>
元素和导入它,该元素必须位于包含对updateNotification
的调用的脚本元素之前。您还必须在 notifications.js之前包含jQuery ,因为它使用jQuery。所以你需要这样的东西:
<body>
// One or two elements
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="notifications.js"></script>
<script type="text/javascript">
$(document).ready( function() {
var json = {status : 'ok', message: 'Hello'};
updateNotification(json);
});
</script>
// All other elements
</body>