attachEvent、addEventListener、detachEvent、removeEventListener

本文主要是介绍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" οnclick="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.οnmοusemοve=function(ev){
X= ev.pageX;Y=ev.pageY;
}

6.DIV等元素的边界问题:
比如:设置一个div的CSS::{width: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-width:0px!important;border-width: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::{width: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.οnlοad=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先触发。

这篇关于attachEvent、addEventListener、detachEvent、removeEventListener的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/455576

相关文章

js window.addEventListener 是什么?

window.addEventListener 是 JavaScript 中的一个方法,用于向指定对象(在这个情况下是 window 对象,代表浏览器窗口)添加事件监听器,以便在该对象上发生特定事件时执行相应的函数(称为事件处理函数或事件监听器)。 这个方法接受三个参数: 事件类型(type):一个字符串,表示要监听的事件类型。例如,"click" 表示鼠标点击事件,"load" 表示页面加

几种pc端页面 常用的js兼容ie写法,几个名词 nodeName nodeValue及value addEventListener attachEvent

注意这里说的兼容ie浏览器,是说兼容ie8及以前的浏览器。ie9及以后就靠谱多了 function(event){    event=event ||window.event;  //window.event是为了兼容ie } ---------------------------------------- function(event){    event=event ||win

关于addEventListener的使用和注意项

一、addEventListener基本理解 addEventListener 是一个 JavaScript DOM 方法,用于向指定元素添加事件监听器。它接受三个参数: 事件类型:一个字符串,表示要监听的事件类型,如 ‘click’、‘mouseover’、‘keydown’ 等。 事件处理函数:当指定的事件发生时,会调用这个函数。这个函数接收一个参数,即触发事件的 Event 对象。

addEventListener(event, function, useCapture) 简记

监听事件方法:addEventListener(<event-name>, <callback>, <use-capture>) 移除监听事件方法:removeEventListener(event, function) 其中 addEventListener(event, function, useCapture) 有三个参数,分别代表: 第一个参数 event-name (String)

addEventListener处理函数添加参数

事情的起因是因为被一个学生问到的,代码如下 var aDiv=oDiv.getElementsByTagName("div");for(var i=0;i<aDiv.length;i++){aDiv[i].addEventListener("mouseover",change(),false);} 问我为什么mouseover事件都没有触发,为什么直接执行了函数。我当时也蒙了一下,但是后

addEventListener()及attachEvent()区别

今天仔细看了一下addEventListener() attachEvent()写篇博客记忆一下。 html代码很简单一句话: <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title></head><body><input type="button" value="按钮" i

addEventListener()方法中的几个参数,以及作用

addEventListener() 方法是 JavaScript 中用于处理指定元素的指定事件的函数。它有三个参数: type(必需):一个字符串,指定要监听的事件名。 listener(必需):一个实现了 EventListener 接口的对象,或者是一个函数,当指定的事件被触发时,该函数将被调用。 options(可选):一个指定有关监听器属性的布尔值或对象的选项。如果是布尔值,它表

addEventListener函数解析

addEventListener () 方法    public override function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void语言版本 :  Ac

element.addEventListener() 方法 详细解析与代码示例

element.addEventListener() 方法用于向指定的元素添加事件监听器。 语法: element.addEventListener(event, function, useCapture); 参数说明: event:表示要监听的事件类型,比如 "click"、"mouseover"、"keydown" 等等。function:表示当事件触发时要执行的函数。useCa

window.addEventListener 用法

window.addEventListener 是JavaScript中用来为DOM元素(在本例中是浏览器窗口window)添加事件监听器的方法。这对于响应用户操作(如点击、滚动等)或页面/浏览器的特定状态变化非常有用。下面是如何使用window.addEventListener的基本语法和一个示例: 基本语法 window.addEventListener(eventType, listen