• <转>window.event对象在ie与ff中的区别


    、event对象只在事件发生的过程中才有效。

    event的某些属性只对特定的事件有意义。比如,fromelement 和 toelement 属性只对 onmouseover 和 onmouseout 事件有意义。
      1、window.event
      IE:有window.event对象
      FF:没有window.event对象。可以通过给函数的参数传递event对象。如onmousemove=domousemove(event)
      2 、鼠标当前坐标
      IE::event.x和event.y。
      FF:event.pagex和event.pagey。
      通用:两者都有event.clientx和event.clienty属性。
      3 、鼠标当前坐标(加上滚动条滚过的距离)
      IE:event.offsetx和event.offsety。
      FF:event.layerx和event.layery。
      4、标签的x和y的坐标位置:style.posleft 和 style.postop
      IE:有。
      FF:没有。
      通用:object.offsetleft 和 object.offsettop。
      5、窗体的高度和宽度
      IE:document.body.offsetwidth和document.body.offsetheight。注意:此时页面一定要有body标签。
      FF:windows.innerwidth和windows.innerhegiht,以及document.documentelement.clientwidth和    
          document.documentelement.clientheight。
      通用:document.body.clientwidth和document.body.clientheight。
      
      6、添加事件
      ie:element.attachevent(”onclick”, func);。
      ff:element.addeventlistener(”click”, func, true)。
      通用:element.onclick=func。虽然都可以使用onclick事件,但是onclick和上面两种方法的效果是不一样的,      onclick只有执行一个过程,而attachevent和addeventlistener执行的是一个过程列表,也就是多个过程。例   
      如:element.attachevent(”onclick”, func1);element.attachevent(”onclick”, func2)这样func1和func2都会被执  
      行。
      
      7、标签的自定义属性
      ie:如果给标签div1定义了一个属性value,可以div1.value和div1[”value”]取得该值。
      ff:不能用div1.value和div1[”value”]取。
      通用:div1.getattribute(”value”)。
      
      8、父节点、子节点和删除节点
      ie:parentelement、parement.children,element.romovenode(true)。
      ff:parentnode、parentnode.childnodes,node.parentnode.removechild(node)。
      
      9、type:事件的类型,如onlick中的click;
        srcelement/target:事件源,就是发生事件的元素;
        button:声明被按下的鼠标键,整数,1代表左键,2代表右键,4代表中键,如果按下多个键,酒把这些值加     起来,所以3就代表左右键同时按下;(firefox中 0代表左键,1代表中间键,2代表右键)
        clientx/clienty:事件发生的时候,鼠标相对于浏览器窗口可视文档区域的左上角的位置;(在dom标准中,这      两个属性值都不考虑文档的滚动情况,也就是说,无论文档滚动到哪里,只要事件发生在窗口左上角,        clientx和clienty都是 0,所以在ie中,要想得到事件发生的坐标相对于文档开头的位置,要加上
        document.body.scrollleft和 document.body.scrolltop)
        offsetx,offsety/layerx,layery:事件发生的时候,鼠标相对于源元素左上角的位置;
        x,y/pagex,pagey:检索相对于父要素鼠标水平坐标的整数;
        altkey,ctrlkey,shiftkey等:返回一个布尔值;
        keycode:返回keydown何keyup事件发生的时候按键的代码,以及keypress 事件的unicode字符;(firefox2       不支持 event.keycode,可以用 event.which替代 )
        fromelement,toelement:前者是指代mouseover事件中鼠标移动过的文档元素,后者指代mouseout事件中     鼠标移动到的文档元素;
        cancelbubble:一个布尔属性,把它设置为true的时候,将停止事件进一步起泡到包容层次的元素;   
       (e.cancelbubble = true; 相当于 e.stoppropagation();)
        returnvalue:一个布尔属性,设置为false的时候可以组织浏览器执行默认的事件动作;(e.returnvalue =       false; 相当于 e.preventdefault();)
        attachevent(),detachevent()/addeventlistener(),removeeventlistener:为制定dom对象事件类型注册多个事件处理函数的方法,它们有两个参数,第一个是事件类型,第二个是事件处理函数。在attachevent()事件执行的时候,this关键字指向的是window对象,而不是发生事件的那个元素;
        screenx、screeny:鼠标指针相对于显示器左上角的位置,如果你想打开新的窗口,这两个属性很重要;

    二、一些说明:
    1、event代表事件的状态,例如触发event对象的元素、鼠标的位置及状态、按下的键等等;
    2、event对象只在事件发生的过程中才有效。
    3、firefox里的event跟ie里的不同,ie里的是全局变量,随时可用;firefox里的要用参数引导才能用,是运行时的临时变量。
    4、在ie/opera中是window.event,在firefox中是event;而事件的对象,在ie中是window.event.srcelement,在firefox中是event.target,opera中两者都可用。
    5、下面两句效果相同
    var evt = (evt) ? evt : ((window.event) ? window.event : null);
    var evt = evt || window.event; // firefox下window.event为null, ie下event为null
    三、ie中事件的起泡
    ie中事件可以沿着包容层次一点点起泡到上层,也就是说,下层的dom节点定义的事件处理函数,到了上层的节点如果还有和下层相同事件类型的事 件处理函数,那么上层的事件处理函数也会执行。例如, div 标签包含了 a ,如果这两个标签都有onclick事件的处理函数,那么执行的情况就是先执行标签 a 的onclick事件处理函数,再执行 div 的事件处理函数。如果希望的事件处理函数执行完毕之后,不希望执行上层的 div 的onclick的事件处理函数了,那么就把cancelbubble设置为true即可。

     四、window.event

     (1)现有问题:
        使用 window.event 无法在 FF 上运行
     (2)解决方法:
            FF 的 event 只能在事件发生的现场使用,此问题暂无法解决。可以这样变通:
       原代码(可在IE中运行):
    <input type="button" name="someButton" value="提交" onclick="javascript:gotoSubmit()"/>
        ...
       <script language="javascript">
            function gotoSubmit() {
                 ...
                 alert(window.event);    // use window.event
                 ...
             }
       </script>

      

        新代码(可在IE和MF中运行): 
      <input type="button" name="someButton" value="提交" onclick="javascript:gotoSubmit(event)"/>
        ...
       <script language="javascript">
           function gotoSubmit(evt) {
               evt = evt ? evt : (window.event ? window.event : null);
                ...
               alert(evt);             // use evt
               ...
           }
       </script>
       此外,如果新代码中第一行不改,与老代码一样的话(即 gotoSubmit 调用没有给参数),则仍然只能在IE中运行,但不会出错。所以,这种方案 tpl 部分仍与老代码兼容。
    转载请注明来自web前端开发,本文链接地址:http://www.candoudou.com/archives/184
  • 相关阅读:
    [HNOI2004]宠物收养所 题解
    文艺平衡树(区间翻转)(Splay模板)
    搜索专题 题解
    Gorgeous Sequence 题解 (小清新线段树)
    花神游历各国 题解(小清新线段树/树状数组+并查集)
    [HNOI2012]永无乡 题解
    poj 3683 2-sat问题,输出任意一组可行解
    hdu 1824 2-sat问题(判断)
    hdu 4115 石头剪子布(2-sat问题)
    hdu 4421 和poj3678类似二级制操作(2-sat问题)
  • 原文地址:https://www.cnblogs.com/xiaohong/p/3301312.html
Copyright © 2020-2023  润新知