attachEvent、addEventListener、detachEvent、removeEventListener

<p>属于DOM<br><br>attachEvent、addEventListener添加事件到对象<br><br>detachEvent、removeEventListener注销对象事件</p>
<p></p>
<p><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br><br><html xmlns="http://www.w3.org/1999/xhtml"><br><head><br> <title>JS</title><br></head><br><body><br> <input id="para" type="text" /><br> <script type="text/javascript"><br>function test(){<br>alert("test");<br>}<br><br>function pig(){<br>alert("pig");<br>}<br><br>window.onload = function(){<br> var element = document.getElementById("para");<br> if(element.addEventListener){ // firefox , w3c<br> element.addEventListener("focus",test,false);<br> element.addEventListener("focus",pig,false);<br> } else { // ie<br> element.attachEvent("onfocus",test);<br> element.attachEvent("onfocus",pig);<br> }<br>}<br></script><br></body></p>
<p></html></p>
<p>****************实例结束**************************</p>
<p></p>
<p>JS:attachEvent和addEventListener 使用方法<br>attachEvent与addEventListener区别<br>适应的浏览器版本不同,同时在使用的过程中要注意<br>attachEvent方法 按钮onclick<br>addEventListener方法 按钮click<br><br>两者使用的原理:可对执行的优先级不一样,下面实例讲解如下:<br>attachEvent方法,为某一事件附加其它的处理事件。(不支持Mozilla系列)<br><br>addEventListener方法 用于 Mozilla系列<br><br>举例: document.getElementById("btn").onclick = method1;<br>document.getElementById("btn").onclick = method2;<br>document.getElementById("btn").onclick = method3;如果这样写,那么将会只有medhot3被执行<br><br>写成这样:<br>var btn1Obj = document.getElementById("btn1"); //object.attachEvent(event,function);<br>btn1Obj.attachEvent("onclick",method1);<br>btn1Obj.attachEvent("onclick",method2);<br>btn1Obj.attachEvent("onclick",method3);执行顺序为method3->method2->method1<br><br>如果是Mozilla系列,并不支持该方法,需要用到addEventListener var btn1Obj = document.getElementById("btn1");<br>//element.addEventListener(type,listener,useCapture);<br>btn1Obj.addEventListener("click",method1,false);<br>btn1Obj.addEventListener("click",method2,false);<br>btn1Obj.addEventListener("click",method3,false);执行顺序为method1->method2->method3<br><br>使用实例:<br><br>1。 var el = EDITFORM_DOCUMENT.body; <br>//先取得对象,EDITFORM_DOCUMENT实为一个iframe<br>if (el.addEventListener){<br>el.addEventListener('click', KindDisableMenu, false);<br>} else if (el.attachEvent){<br>el.attachEvent('onclick', KindDisableMenu);<br>}2。 if (window.addEventListener) {<br>window.addEventListener('load', _uCO, false);<br>} else if (window.attachEvent) {<br>window.attachEvent('onload', _uCO);<br>}</p>
<p></p>
<p><span style="font-size: medium;">js 监听事件,ie 火狐 javascript addEventListener attachEvent</span></p>
<p><head><br><script type='text/javascript'><br>function init() {<br>// 跳转处理<br>var handler = function(){<br> var host = document.location.href;<br> if(host.indexOf('jx163.cn') >= 0)<br> document.location = "/";<br> else ;<br>};<br><br>// 添加监听<br>if (window.addEventListener) {<br> window.addEventListener('DOMContentLoaded', handler, false);<br> window.addEventListener('load', handler, false);<br>} else if (window.attachEvent)<br> window.attachEvent('onload', handler);<br>else<br> window.onload = handler;<br>} // end init<br><br>init();<br></script><br><br></head><br><body><br>--------------------</p>
<p>window和firefox下的event</p>
<p>--------------------</p>
<p><SCRIPT LANGUAGE="JavaScript"><br><!--<br>function hh(e)<br>{<br>alert(arguments[0]);<br>e=window.event||e;<br>var el=e.srcElement||e.target;<br>alert(el.value);<br>}<br>//--><br></SCRIPT><br><INPUT id ="button2" value ="hahahahah" TYPE="button" οnclick="hh(event);"></p>
<p>--------------------</p>
<p>test</p>
<p>--------------------</p>
<p>if(WebComm.getOS() == "MSIE")<br> {<br> obj.setCapture ();<br> }<br> else<br> {<br> document.addEventListener("mousemove",WebComm.MoveDiv,false);<br> }</p>
<p>if(WebComm.getOS() == "MSIE")<br> {<br> obj.releaseCapture ();<br> }<br> else<br> {<br><br> document.removeEventListener("mousemove",WebComm.MoveDiv,false);<br> }</p>
<p>------------------</p>
<p>1.火狐不能对innerText支持,也不知道为什么。火狐支持innerHTML但却不支持 innerText,所以上网查了一 下,原来它改支持textContent来实现innerText,不过实现得没有那么好,默认把多余的空格也保留了。如果不用textContent, 如果字符串里面不包含HTML代码也可以用innerHTML代替<br><br>2.禁止选取网页内容:<br>在IE中一般用js:obj.onselectstart=function(){return false;}<br>而火狐用CSS:-moz-user-select:none<br><br>3.滤镜的支持(例:透明滤镜):<br>IE:filter:alpha(opacity=10);<br>火狐:-moz-opacity:.10;<br><br>4.捕获事件:<br>IE:obj.setCapture() 、obj.releaseCapture()<br>火狐: document.addEventListener("mousemove",mousemovefunction,true);<br>document.removeEventListener("mousemove",mousemovefunction,true);<br><br>5.获取鼠标位置:<br>IE:event.clientX、event.clientY<br>火狐:需要事件函数传递事件对象<br>obj.οnmοusemοve=function(ev){<br>X= ev.pageX;Y=ev.pageY;<br>}<br><br>6.DIV等元素的边界问题:<br>比如:设置一个div的CSS::{width:100px;height:100px;border:#000000 1px solid;}<br>IE中:div的宽度(包括边框宽度):100px,div的高度(包括边框宽度):100px;<br>而火狐:div的宽度(包括边框宽度):102px,div的高度(包括边框宽度):102px;<br><br><br>所以在做这个兼容IE和火狐的拖动窗口时,在js和css的写法上要动点脑筋,给大家两个小技巧.<br>一.判断浏览器类型:<br>var isIE=document.all? true:false;<br>我写了一个变量,如果支持document.all语法那么isIE=true,否则isIE=false<br><br>二.在不同浏览器下的CSS处理:<br>一般可以用!important来优先使用css语句(仅火狐支持)<br>比如:{border-width:0px!important;border-width:1px;}<br>在火狐下这个元素是没有边框的,在IE下边框宽度是1px<br><br>又发现几处XHTML与正常状态下的JS、CSS的区别,前阶段写了兼容IE/火狐的拖动窗口发现了这两个浏览器的几处区别。今天又写了兼容XHTML的 版本,因为现在不是流行web标准嘛,偶不能落后啊!再说现在ASP.NET中的所有页面都是应用XHTML标准的,如果在布局页面中删了这句标准代码, 里面的布局和控件visual studio就不显示了。</p>
<p>呵呵,在网页开头加了这个代码就是所谓的XHTML标准了<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br><br>改了一下JS和CSS,调试了N次,发现了XHTML标准下的几个不同点:<br>1.document.documentElement 与 document.body<br>代码中设置页面的CSS时一定要用:document.documentElement <br>比如:document.documentElement.style.overflow='hidden';<br>overflow-X、overflow-Y 这两个分坐标属性XHTML是不支持的;<br><br>2.在取得网页窗口区域和获取滚动条位移距离时也要用document.documentElement <br>即这四个属性(clientWidth、clientHeight、scrollLeft、scrollTop)一定要用document.documentElement <br>但是document.body.appendChild()和document.body.removeChild()却是可以用的,而且用 document.documentElement.appendChild()和 document.documentElement.removeChild()代替却会报错;<br><br>所以我总结了一下仅clientWidth、clientHeight、scrollLeft、scrollTop和document.documentElement.style时才用document.documentElement<br><br>3.呵呵,加了这个标准以后IE的边框问题也出现了变化,现在和火狐趋于一致了,是不是这个就是XHTML的优点——跨浏览器的标准<br>上篇文章提到:<br>设置一个div的CSS::{width:100px;height:100px;border:#000000 1px solid;}<br>IE中(正常情况):div的宽度(包括边框宽度):100px,div的高度(包括边框宽度):100px;<br><a href="http://firefox.sun-sky.com.cn/">火狐</a>(正常情况)::div的宽度(包括边框宽度):102px,div的高度(包括边框宽度):102px;<br><br>加了XHTML标准后的(IE和火狐打和了,^_^):<br>IE中(XHTML):div的宽度(包括边框宽度):102px,div的高度(包括边框宽度):102px;<br>火狐(XHTML)::div的宽度(包括边框宽度):102px,div的高度(包括边框宽度):102px;</p>
<p>--------------------</p>
<p>对于IE的attachEvent方法可能大家都比较熟,现在说说FireFox的addEventListener的用法。</p>
<p>addEventListener的参数一共有三个,语法为:</p>
<p class="code_js">element.addEventListener(type,listener,useCapture)</p>
<p>下面是详解</p>
<ul>
<li>其中element是要绑定函数的对象。</li>
<li>type是事件名称,要注意的是"onclick"要改为"click","onblur"要改为"blur",也就是说事件名不要带"on"。</li>
<li>listener当然就是绑定的函数了,记住不要跟括号</li>
<li>最后一个参数是个布尔值,表示该事件的响应顺序,下面重点介绍一下addEventListener的第3个参数(useCapture)。</li>
</ul>
<p>userCapture若为true,则浏览器采用Capture,若为false则采用bubbing方式。建议用false,看个例子吧。</p>
<p>html代码</p>
<p class="code_html"><div id="div_test"> <input type="button" id="btn_test" value="se4.cn技术基地" /> </div></p>
<p>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触发") }</p>
<p>如果userCapture是true则test1先触发,如果userCapture是false则test2先触发。</p>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值