我在页面上有以下简单的脚本
<!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">
var nsTest = function ()
{
var test = function ()
{
alert('nsTest.test');
}
var test2 = function ()
{
alert('nsTest.test2');
}
return {
test: test,
test2: test2
}
} ();
function t()
{
alert(nsTest.test());
}
function t2()
{
alert(nsTest.test2());
}
</script>
</head>
<body>
<input type="button" value="test" onclick="t()" />
<input type="button" value="test2" onclick="t2()" />
</body>
</html>
当我点击其中一个按钮时,我会在screent上看到预期的警报,然后是第二个显示“未定义”的警告。
这发生在IE8和FF3中。 有什么想法发生了什么?
谢谢,
大卫
答案 0 :(得分:3)
你说两次警告。 你不需要说
警报(nsTest.test2());
你只需要调用nsTest.test2();
<!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">
var nsTest = function ()
{
var test = function ()
{
alert('nsTest.test');
}
var test2 = function ()
{
alert('nsTest.test2');
}
return {
test: test,
test2: test2
}
}();
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>
实际上你甚至不需要函数t1和t2你可以直接使用你的onclick引用nsTest.test2(),如下所示http://jsbin.com/ageva5/2/edit
答案 1 :(得分:1)
您致电t()
,呼叫nsTest.test()
...
nsTest.test()
警告字符串'nsTest.test'
,然后没有返回值,因此返回undefined
。
... t()
然后收到返回值并提醒它。
答案 2 :(得分:1)
首先运行nsTest中的警报,然后运行t()和t2()中的警报。这些警报会警告nsTest的返回值。*。这些值未定义。删除这些警报只能获得第一个警报。