2011-05-03 99 views
0

我有一个页面意外警报被称为

<!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中。 任何想法发生了什么?

感谢,

大卫

回答

3

你讲的警报两次。 您不需要说

alert(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

+0

我现在感觉有多愚蠢?指出时很明显!谢谢Daveo – dlarkin77 2011-05-03 10:56:03

1

你叫t()这就要求nsTest.test() ...

nsTest.test()提示字符串'nsTest.test',然后没有返回值,因此返回undefined

... t()然后接收返回值并提醒它。

1

首先运行nsTest中的警报,然后运行t()和t2()中的警报。这些警报会提示nsTest。*的返回值。这些值是未定义的。删除这些警报只会得到第一个警报。