日期:2014-05-16  浏览次数:20487 次

直接在html里给标签的点击事件绑定函数的时候,为什么不能这么写?
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
       <a id="a1" href="#" onclick="(function(){alert('a1');})() ">正确</a>
       <a id="a2" href="#" onclick="function(){alert('a2');}">错误</a>
       <a id="a3" href="#">错误吗?</a>
</body>
</html>
<script type="text/javascript">
  var a3 = document.getElementById('a3');
  a3.onclick= function(){alert('a3');};
</script>

结果就是a1和a3的点击事件会正常执行,a2就会有错误。
可是a1、a2、d3的点击事件的绑定方式都是一样的使用匿名函数,而且a2和a3的匿名函数的写法也都是"function(){}",为啥a2这种写法不行呢?
哪位清楚的,给我多说说这方面的知识吧……
function html javascript

------解决方案--------------------
a1是匿名函数立即执行  也就是你点击后生成函数后立即运行这个函数 
a2只是定义函数  点击后定义了一个函数而已  没执行 
a3你可以看做有个属性时onclick  他是个函数  当你点击时执行这个函数
------解决方案--------------------
<!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></title>
</head>
<body>
       <a id="a1" href="#" onclick="(function(){alert('a1');})() ">正确</a>
       <a id="a2" href="#" onclick="window['k']=function(){alert('a2');}">错误</a>
       <a id="a3" href="#">错误吗?</a>
</body>
</html>
<script type="text/javascript">
  var a3 = document.getElementById('a3');
  a3.onclick= function(){alert('a3');k()};
  
</script>
比如这样  你点a3时只会输出a3然后报错  点完a3再点a3就回输出a3和a2了
------解决方案--------------------
点完a2再点a3就回输出a3和a2了 
------解决方案--------------------
<a id="a2" href="#" onclick="function(){alert('a2');}">错误</a>

浏览器会把 onclick 的属性值,封装到一个函数中。
相当于:
 var a3 = document.getElementById('a3');
  a3.onclick= function(){
     function(){alert('a2');}
};
------解决方案--------------------
1楼正解~~。
------解决方案--------------------
引用:
a1是匿名函数立即执行  也就是你点击后生成函数后立即运行这个函数 
a2只是定义函数  点击后定义了一个函数而已  没执行 
a3你可以看做有个属性时onclick  他是个函数  当你点击时执行这个函数

正解
------解决方案--------------------
在使用htm