您好我正在使用momemt的google ajax api并按照文档中的示例在我的html文件中有两个脚本标记:
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script language="Javascript" type="text/javascript">google.load('search', '1');</script>
一切正常,但是当我使用jquery并尝试调用google.load('search','1')时,它将无法正常工作;在$(document).ready(function()
之后的外部javascript文件中我收到以下错误:null为null或不是对象。
我显然缺少一些基本的东西,因为我只是在学习javascript,但我的印象是最好不要不引人注意地使用javascript。实际包含一些js代码的第二个脚本标记不是不引人注目的。有人可以帮忙解决这个问题吗?
答案 0 :(得分:7)
根据您的解释,您的网页似乎设置如下:
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
google.load('jquery');
$(document).ready(function(){
... do stuff ...
});
</script>
<script src="/my/external.js" type="text/javascript"></script>
但是,无法按预期工作,因为document.ready
事件在DOM完全加载之前不会触发。但是,JavaScript文件在加载时执行。所以实际执行情况如下:
根据代码的其余部分,您可能希望将所有初始化代码放在单独的文件中,或将search
加载移回主文档。
关于非法行为代码:
大卫,不引人注目的JavaScript与它如何影响页面有关,而不是它是否是页内或外部。
更多的是不要让你的网站如此依赖于JavaScript而不能禁用它
例如,这是突兀的:
<a href="#" onclick="doSomething(); return false;">Click Me</a>
因为它只能在启用JavaScript的情况下使用。此外,代码是内联的,这是不好的,因为它没有将功能与结构(HTML)分开。
然而,采取类似的代码:
<a href="/do/something" id="do-something">Click Me</a>
并使用此javascript / jquery片段:
$(document).ready(function(){
$("#do-something").click(function(e){
doSomethingNicer();
e.preventDefault(); // Keep the browser from following the href
});
});
变得不显眼,因为页面仍然有效(默认情况下加载/执行/某些操作),但是当启用JavaScript时它会以更好的方式工作(执行javascript而不是加载该URL)。这也称为渐进增强。