http://dl.dropbox.com/u/331982/Sandbox/comsat.html <--代码
http://dl.dropbox.com/u/331982/Sandbox/comsat.js <-- javascript文件的位置
所以,当我把所有东西都放在一个文件中时,这个方法就行了,但是我不喜欢在我的HTML中有巨大的脚本标记。
我得到的错误是其中一个拉斐尔方法是未定义的……=\
如何正确加载我的脚本?
所有内容都加载到<head>
中
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Comsat</title>
<script type="text/javascript" src="http://dl.dropbox.com/u/331982/Sandbox/raphael-min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
<script type="text/javascript" src="http://dl.dropbox.com/u/331982/Sandbox/comsat.js"></script>
<style type="text/css">
body{
background: url(http://i.imgur.com/Ks6Pd.jpg);
}
</style>
</head>
发布于 2011-08-12 07:29:45
在我看来,错误在于没有定义initPlayerSelect()
,我认为这是因为该函数不在全局作用域中,而是在另一个函数作用域中定义的,因此无法从initComSat()
访问。
您需要这样做,以便可以从initComSat()
函数内部访问initPlayerSelect()
。
要做到这一点,一种方法是将initPlayerSelect()
代码移出它所在的块,并将其放在initComSat()
之前。
仅供参考,这个特定的错误与使用JS文件或任何顺序的JS文件无关-它纯粹是一个函数作用域问题。
我看到的下一个错误是因为您在comsat.js中加载页面之前正在运行jQuery DOM访问代码:
/*
DOM Containers
*/
var cs_playerList = [];
var cs_players = $("ul.players");
// End DOM Containers
此代码在脚本加载时失败,这会导致cs_players
为null
或undefined
,随后会导致initPlayerSelect()
失败。
这样的代码只有在页面加载完成后才能运行。当页面加载时,jQuery有运行代码的$(document).ready()
。
发布于 2011-08-12 07:32:41
除了雅各布所说的,您还需要监听DOM何时加载。在该函数中,执行初始化。有许多实用程序可以做到这一点,包括jQuery函数。如果您使用的是jQuery。例如,在jQuery中,它看起来像这样:
$( function()
{
//initialize stuff here
});
https://stackoverflow.com/questions/7034079
复制相似问题