是关于浏览器兼容的,因为IE跟DOM标准不一样,有些代码写法不一样,所以会写这样的兼容语句d=e?e:event;但是这个三目运算不是判断e的bool值然后确定是e还是event吗?
然后我就写了这样一段<script>
document.onclick=function(e)
{
d=e?e:event;
if(d==e)
{alert("this is e!!");}
if(d==event)
{alert("this is event");}

alert(d.clientX+":"+d.clientY);
}
</script>就是一个单击事件,然后看d到底是为e还是event,我在360极速浏览器和ie9下测试
360极速浏览器会一次弹出this is e!! 
this is event 跟坐标而IE9则只弹出this is e!!跟坐标我混乱了,为什么极速浏览器会把e跟event两个值都显示呢?
那这里的e到底是个什么类型的数据,e? 判断的又是什么... 

解决方案 »

  1.   

    我看楼主还是不明白这里面的原理你虽然知道要这样写,但你不明白为什么要这样写,我给你简单解释下吧event对象在IE以及webkit浏览器(chrome,safari,opera,遨游3)下都是存在的,都是全局对象,只有FireFox中不存在window.event,所以这样的写法是为了兼容FireFox的。上面是IE、WebKit与FireFox之间的区别,下面给你说下IE和Webkit浏览器的区别webkit浏览器会在事件发生现场传递一个参数,就是你上面写的e,但IE不会传递这样一个参数,所以IE中只会取window.event,你alert(e)下试试,一定会弹出undefined的
    最后说一句,360极速说白了就是chrome浏览器加了一个壳而已
      

  2.   


    终于有人答复了,感激,看懂了一些,但还有部分不明白,就是那个三目运算 e?e:event这不是最终只能得到一个值么,要么是e要么是event  在FF浏览器里,没有那个e参数,那e也是undefined了?我没有FF浏览器,我这就去下一个...
      

  3.   

    你错了,FireFox下是有这个参数的,而且是只有在这个时候才有FireFox和webkit浏览器下都会传递这个事件参数,在webkit浏览器下你可以使用e或者window.event,但在FireFox中你只能使用e,在IE下只能使用window.event
      

  4.   

    嗯,你说的对,FireFox下有这个e参数,那么,就剩那个三目运算了,我还是不明白
    e=e?e:event;
    可以换成
    d=e?e:event;么或者是
    if(e)
    {e=e;} //{d=e;}
    else
    {e=event;}  //{d=event;}最后alert{e.clientX+":"+e.clientY};  //alert{d.clientX+":"+d.clientY}; 我理解这里的兼容应该就是最后那个x.clientX
    在不同浏览器下,x是不一样的,是e或者是event,而前面所做的工作就是确定这里的x应该是哪个,是这样么?真的很感谢你的回答
      

  5.   

    可以的e=e?e:event和d=e?e:event这2种写法都是可以的,这个参数的名字你可以自定义那个三目运算的意思是先判断e,如果e为true或者不是undefined,那么就取e的值,反之,就取window.event的值那么执行的结果就是webkit浏览器下会取e,Firefox下也会取e,而IE则会取window.event
      

  6.   

    前面写的那么多,主要就是为了在获取event的时候能够兼容各个浏览器而已