新学JS,这是正确的代码:
<html>
   <body>
       <p><a href="1111.html" id="cat1">图片1</a></p>
    <div><span id="show"></span></div>
   </body>
</html>window.onload=init;
function init()
{
 var show=document.getElementById("cat1");
  show.onclick=onshow;
}function onshow()
{
 document.getElementById("show").innerHTML="测试成功";
 return false;
}但如果我把JS代码修改为带参数函数(红色为修改部分)
function init()
{
 var show=document.getElementById("cat1");
  show.onclick=onshow("测试成功");
}
 
function onshow(msg)
{
 document.getElementById("show").innerHTML=msg;
 return false;
}代码就是错误的了,而且代码会完全忽略onclick事件,这是为什么?

解决方案 »

  1.   

    show.onclick=function(){onshow("测试成功"); }
      

  2.   

    1. onshow是一个对象,类型为Function
    2. onshow("测试成功") 表示执行这个方法
    3. onclick = 后面显然只能跟一个Function
    4. show.onclick = onshow("测试成功") 实际上等于 show.onclick = false 
      (因为你执行了这个方法,return false)
    5. 想传参可以这样写
       show.onclick = function(){
          onshow("测试成功");
       } 
    或者
       function onshow(msg){
          return function(msg){
             //......
          }
       }
    不知道写错了没,思路就是这样的,搞清楚原理就好
      

  3.   

    onclick期待的是函数句柄, show()得到的是函数返回值,除非返回值是函数句柄才可以<html> 
      <body> 
          <p> <a href="#" id="cat1">图片1 </a> </p> 
        <div> <span id="show"> </span> </div> <script>
    window.onload=init; 
    function init() 

     var show=document.getElementById("cat1"); 
     show.onclick= function(){onshow("测试成功")}; 
    } function onshow(msg) 

    document.getElementById("show").innerHTML=msg; 
    return false; 
    } </script>  </body> 
    </html> 
      

  4.   

    我懂了,其实我要的就是这句:onclick期待的是函数句柄, show()得到的是函数返回值,除非返回值是函数句柄才可以。谢谢诸位