我有一些代码可以正常工作,如果它被添加到页面上的脚本标记。我已经将它移动到一个单独的JS文件中(与HTML页面位于同一个文件夹中),但是当我尝试调用它时,我会收到“对象预期”错误。
这是我的HTML页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled Page</title>
<script type="text/javascript" src="Jscript1.js" />
<script type="text/javascript">
function t()
{
nsTest.test();
}
function t2()
{
nsTest.test2();
}
</script>
</head>
<body>
<input type="button" value="test" onclick="t()" />
<input type="button" value="test2" onclick="t2()" />
</body>
</html>
这是我的JS文件:
var nsTest = function ()
{
var test = function ()
{
alert('nsTest.test');
}
var test2 = function ()
{
alert('nsTest.test2');
}
return {
test: test,
test2: test2
}
} ();
我确信我错过了一些非常简单明了的东西,但我对JS很陌生,而且此时我已经绕圈了几个小时。
有人可以让我知道我做错了吗?
谢谢,
大卫
答案 0 :(得分:4)
<script type="text/javascript" src="Jscript1.js" />
是XML而不是HTML。
因此,您没有完整的脚本标记,这可能会破坏以下脚本标记中的定义。
将其更改为
<script type="text/javascript" src="Jscript1.js"></script>
如果这不能解决问题(即,如果DTD是真正的XHTML DTD),则“JScript1.js”未正确提供。也许可以尝试在浏览器中加载它以检查它是否正在提供,并提供类似文本/ javascript的mime类型。
答案 1 :(得分:2)
(function nsTest (){
var test = function (){
alert('nsTest.test');
}
var test2 = function (){
alert('nsTest.test2');
}
return {
test: test,
test2: test2
}
}) ();
在立即通话时,您必须将功能括在括号中。
答案 2 :(得分:0)
我发现这可以寻找同样问题的帮助。在我的情况下,问题是我的标签有 type =“application / javascript”而不是 type =“text / javascript”。
这在大多数浏览器中都有效但是使用“预期的对象”使IE 8出错。
type =“text / javascript”是正确的属性。
希望能有所帮助。