<body>
<div onclick="alert(1)"> 
  <div onclick="alert(2)"> 
    <div onclick="alert(3)"> 
      <div onclick="alert(4)"> 
        <div onclick="alert(5)"> 
          <input id="oo" value="button" type="button" onclick="alert(6)"> 
        </div> 
      </div> 
    </div> 
  </div> 
</div> 
</body>
<script> 
  var arrLayer = [2,5] 
   var ok =0
   var pan =false
  var obj=document.getElementById("oo")
  function init(layer){ 
   while (obj!=document.body){ 
      obj=obj.parentNode
      ok++
        
      for(var i=0;i<layer.length;i++)
         {
           if(ok==layer[i])
            {pan=true}
         }
         
      if(pan)
      {pan=false
      continue;}
      else
      {obj.onclick=function(e){
       e=e||event
       e.returnValue =false}}
    }
          
  } 
  init(arrLayer)
</script> 以上代码中
obj.onclick=function(e){
       e=e||event
       e.returnValue =false}
这段代码是匿名传入event对象的意思吗?我理解不了,有谁能深入的讲解下因为
<div>a</div>
document.getElementById("a").onclick=function(e){
       e=e||event
       e.returnValue =false}
的时候根本是无效代码,请大侠解答

解决方案 »

  1.   

    这段代码主要是为了处理键盘事件的,在IE中event作为window对象的一个属性可以直接使用,但是在Firefox中却使用了W3C的模型,它是通过传参的方法来传播事件的,也就是说你需要为你的函数提供一个事件响应的接口,在上述函数中,
    eventTag扮演的就是这个角色。
      var event = eventTag||window.event;
      这段代码可以根据浏览器的不同来得到正确的event,并在程序中使用,如果在IE4+下面使用这段代码,因为eventTag为null可以保证 event = window.event,但是如果在Firefox下运行的话则因为手工的给定了eventTag所以 var event = eventTag。根据对这一段代码的分析我们也不难看出可以对doEventThing方法进行如下的改造(因为 javascript允许我们在定义function的时候不明确指出参数的数量): 
    function doEventThing(){    
        var event = arguments[0]||window.event;    
         //other code    

      
      在Firefox下arguments[0]在特定的场合(没有显式的指定function参数数量的时候)被做为传播事件的参数来使用
      

  2.   

    貌似是我写的
    javascript高级程序设计233页
    dom准则说:event对象必须作为唯一的参数传递给事件处理函数
    可以不把参数写出来,直接用 arguments[0] 这个貌似楼上已经说了  
      

  3.   

    好像是禁止onclick事件  或者代码有问题
      

  4.   

    直接
    document.getElementById("a").onclick=function(){ 
          alert()} ;吗?
      

  5.   

    e.returnValue =false;只在IE下有效,用来取消浏览器的默认操作.
      

  6.   

    event是个全局的,具体的说,他是window下的一个对象,是用来记录最近一次所触发的事件
    比如说,你可以通过window.event.srcElement得到触发事件的对象