zoukankan      html  css  js  c++  java
  • attachEvent、addEventListener、detachEvent、removeEventListener

    属于DOM

    attachEvent、addEventListener添加事件到对象

    detachEvent、removeEventListener注销对象事件

    <!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>JS</title>
    </head>
    <body>
        <input id="para" type="text" />
       <script type="text/javascript">
    function test(){
    alert("test");
    }

    function pig(){
    alert("pig");
    }

    window.onload = function(){
             var element = document.getElementById("para");
             if(element.addEventListener){ // firefox , w3c
                    element.addEventListener("focus",test,false);
        element.addEventListener("focus",pig,false);
             } else {   // ie
        element.attachEvent("onfocus",test);
        element.attachEvent("onfocus",pig);
             }
    }
    </script>
    </body>

    </html>

    ****************实例结束**************************

    JS:attachEvent和addEventListener 使用方法
    attachEvent与addEventListener区别
    适应的浏览器版本不同,同时在使用的过程中要注意
    attachEvent方法          按钮onclick
    addEventListener方法    按钮click

    两者使用的原理:可对执行的优先级不一样,下面实例讲解如下:
    attachEvent方法,为某一事件附加其它的处理事件。(不支持Mozilla系列)

    addEventListener方法 用于 Mozilla系列

    举例: document.getElementById("btn").onclick = method1;
    document.getElementById("btn").onclick = method2;
    document.getElementById("btn").onclick = method3;如果这样写,那么将会只有medhot3被执行

    写成这样:
    var btn1Obj = document.getElementById("btn1"); //object.attachEvent(event,function);
    btn1Obj.attachEvent("onclick",method1);
    btn1Obj.attachEvent("onclick",method2);
    btn1Obj.attachEvent("onclick",method3);执行顺序为method3->method2->method1

    如果是Mozilla系列,并不支持该方法,需要用到addEventListener var btn1Obj = document.getElementById("btn1");
    //element.addEventListener(type,listener,useCapture);
    btn1Obj.addEventListener("click",method1,false);
    btn1Obj.addEventListener("click",method2,false);
    btn1Obj.addEventListener("click",method3,false);执行顺序为method1->method2->method3

    使用实例:

    1。 var el = EDITFORM_DOCUMENT.body;
    //先取得对象,EDITFORM_DOCUMENT实为一个iframe
    if (el.addEventListener){
    el.addEventListener('click', KindDisableMenu, false);
    } else if (el.attachEvent){
    el.attachEvent('onclick', KindDisableMenu);
    }2。 if (window.addEventListener) {
    window.addEventListener('load', _uCO, false);
    } else if (window.attachEvent) {
    window.attachEvent('onload', _uCO);
    }

    js 监听事件,ie 火狐 javascript addEventListener attachEvent

    <head>
    <script type='text/javascript'>
    function init() {
    // 跳转处理
    var handler = function(){
         var host = document.location.href;
         if(host.indexOf('jx163.cn') >= 0)
            document.location = "/";
         else ;
    };

    // 添加监听
    if (window.addEventListener) {
        window.addEventListener('DOMContentLoaded', handler, false);
        window.addEventListener('load', handler, false);
    } else if (window.attachEvent)
        window.attachEvent('onload', handler);
    else
        window.onload = handler;
    } // end init

    init();
    </script>

    </head>
    <body>
    --------------------

    window和firefox下的event

    --------------------

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function hh(e)
    {
    alert(arguments[0]);
    e=window.event||e;
    var el=e.srcElement||e.target;
    alert(el.value);
    }
    //-->
    </SCRIPT>
    <INPUT id ="button2"   value ="hahahahah" TYPE="button" onclick="hh(event);">

    --------------------

    test

    --------------------

    if(WebComm.getOS() == "MSIE")
        {
         obj.setCapture ();
        }
        else
        {
         document.addEventListener("mousemove",WebComm.MoveDiv,false);
        }

    if(WebComm.getOS() == "MSIE")
        {
         obj.releaseCapture ();
        }
        else
        {
        
         document.removeEventListener("mousemove",WebComm.MoveDiv,false);
        }

    ------------------

    1.火狐不能对innerText支持,也不知道为什么。火狐支持innerHTML但却不支持innerText,所以上网查了一 下,原来它改支持textContent来实现innerText,不过实现得没有那么好,默认把多余的空格也保留了。如果不用textContent, 如果字符串里面不包含HTML代码也可以用innerHTML代替

    2.禁止选取网页内容:
    在IE中一般用js:obj.onselectstart=function(){return false;}
    而火狐用CSS:-moz-user-select:none

    3.滤镜的支持(例:透明滤镜):
    IE:filter:alpha(opacity=10);
    火狐:-moz-opacity:.10;

    4.捕获事件:
    IE:obj.setCapture() 、obj.releaseCapture()
    火狐: document.addEventListener("mousemove",mousemovefunction,true);
    document.removeEventListener("mousemove",mousemovefunction,true);

    5.获取鼠标位置:
    IE:event.clientX、event.clientY
    火狐:需要事件函数传递事件对象
    obj.onmousemove=function(ev){
    X= ev.pageX;Y=ev.pageY;
    }

    6.DIV等元素的边界问题:
    比如:设置一个div的CSS::{100px;height:100px;border:#000000 1px solid;}
    IE中:div的宽度(包括边框宽度):100px,div的高度(包括边框宽度):100px;
    而火狐:div的宽度(包括边框宽度):102px,div的高度(包括边框宽度):102px;


    所以在做这个兼容IE和火狐的拖动窗口时,在js和css的写法上要动点脑筋,给大家两个小技巧.
    一.判断浏览器类型:
    var isIE=document.all? true:false;
    我写了一个变量,如果支持document.all语法那么isIE=true,否则isIE=false

    二.在不同浏览器下的CSS处理:
    一般可以用!important来优先使用css语句(仅火狐支持)
    比如:{border-0px!important;border-1px;}
    在火狐下这个元素是没有边框的,在IE下边框宽度是1px

    又发现几处XHTML与正常状态下的JS、CSS的区别,前阶段写了兼容IE/火狐的拖动窗口发现了这两个浏览器的几处区别。今天又写了兼容XHTML的版本,因为现在不是流行web标准嘛,偶不能落后啊!再说现在ASP.NET中的所有页面都是应用XHTML标准的,如果在布局页面中删了这句标准代码,里面的布局和控件visual studio就不显示了。

    呵呵,在网页开头加了这个代码就是所谓的XHTML标准了<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    改了一下JS和CSS,调试了N次,发现了XHTML标准下的几个不同点:
    1.document.documentElement 与 document.body
    代码中设置页面的CSS时一定要用:document.documentElement
    比如:document.documentElement.style.overflow='hidden';
    overflow-X、overflow-Y 这两个分坐标属性XHTML是不支持的;

    2.在取得网页窗口区域和获取滚动条位移距离时也要用document.documentElement
    即这四个属性(clientWidth、clientHeight、scrollLeft、scrollTop)一定要用document.documentElement
    但是document.body.appendChild()和document.body.removeChild()却是可以用的,而且用 document.documentElement.appendChild()和 document.documentElement.removeChild()代替却会报错;

    所以我总结了一下仅clientWidth、clientHeight、scrollLeft、scrollTop和document.documentElement.style时才用document.documentElement

    3.呵呵,加了这个标准以后IE的边框问题也出现了变化,现在和火狐趋于一致了,是不是这个就是XHTML的优点——跨浏览器的标准
    上篇文章提到:
    设置一个div的CSS::{100px;height:100px;border:#000000 1px solid;}
    IE中(正常情况):div的宽度(包括边框宽度):100px,div的高度(包括边框宽度):100px;
    火狐(正常情况)::div的宽度(包括边框宽度):102px,div的高度(包括边框宽度):102px;

    加了XHTML标准后的(IE和火狐打和了,^_^):
    IE中(XHTML):div的宽度(包括边框宽度):102px,div的高度(包括边框宽度):102px;
    火狐(XHTML)::div的宽度(包括边框宽度):102px,div的高度(包括边框宽度):102px;

    --------------------

    对于IE的attachEvent方法可能大家都比较熟,现在说说FireFox的addEventListener的用法。

    addEventListener的参数一共有三个,语法为:

    element.addEventListener(type,listener,useCapture)

    下面是详解

    • 其中element是要绑定函数的对象。
    • type是事件名称,要注意的是"onclick"要改为"click","onblur"要改为"blur",也就是说事件名不要带"on"。
    • listener当然就是绑定的函数了,记住不要跟括号
    • 最后一个参数是个布尔值,表示该事件的响应顺序,下面重点介绍一下addEventListener的第3个参数(useCapture)。

    userCapture若为true,则浏览器采用Capture,若为false则采用bubbing方式。建议用false,看个例子吧。

    html代码

    <div id="div_test"> <input type="button" id="btn_test" value="se4.cn技术基地" /> </div>

    window.onload=function(){ document.getElementById("div_test").addEventListener("click",test1,false); document.getElementById("btn_test").addEventListener("click",test2,false); } function test1(){ alert("外层div触发") } function test2(){ alert("内层input触发") }

    如果userCapture是true则test1先触发,如果userCapture是false则test2先触发。

  • 相关阅读:
    Serializable读写类操作
    socket模拟通信
    使用poi实现生成excel文件
    注解形式的通知
    使用linkedhashmap实现LRU(最近最少使用缓存算法)
    websocket的使用
    centos systemctl daemon-reload 提示 no such file or directory 的一个原因
    mac 10.13 build 一个 redis desktop manager
    mac 必备工具
    supervisor 添加新配置不生效的问题
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1566502.html
Copyright © 2011-2022 走看看