• 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先触发。

  • 相关阅读:
    web前端的发展态势
    AngularJs 简单入门
    css代码优化篇
    git提交报错:Please make sure you have the correct access rights and the repository exists.
    Activiti工作流框架学习
    遍历map集合的4种方法
    js设置日期、月份增加减少
    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    webservice_rest接口_学习笔记
    相互匹配两个list集合+动态匹配${}参数
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1566502.html
Copyright © 2020-2023  润新知