首页 > 语言 > JavaScript > 正文

JavaScript实现添加及删除事件的方法小结

2024-05-06 16:24:21
字体:
来源:转载
供稿:网友

这篇文章主要介绍了JavaScript实现添加及删除事件的方法,实例总结了javascript对事件的添加及删除的技巧,涉及javascript事件绑定的方法及浏览器兼容的相关注意事项,需要的朋友可以参考下

本文实例总结了JavaScript实现添加及删除事件的方法。分享给大家供大家参考。具体如下:

JavaScript添加、删除事件的方法,也就是让某些方法生效指定次数,可以是一次、两次或更多次,但指定次数执行完毕后就删除该方法,使其失效,如果你经常从事JS编程,你就会知道这种功能用得比较多。

先来看看一个比较简单的例子:

 

 
  1. function $(id) 
  2. return document.getElementByIdx_x(id); 
  3. var ev = null
  4. var count1 = 0; 
  5. var count2 = 0; 
  6. var oncount1 = 0; 
  7. var oncount2 = 0; 
  8. var isSetEv1 = false
  9. var isSetEv2 = false
  10. //创建事件的通用函数 
  11. var EventUtil = function(){}; 
  12. var flag = new Flag(); 
  13. //监控变量值 
  14. function Flag() 
  15. var tempflag = false
  16. var method = null
  17. this.SetMethod = function(value) 
  18. method = value; 
  19. }  
  20. this.SetValue = function(value) 
  21. tempflag = value; 
  22. if(tempflag == true && method){eval_r(method)}  
  23. this.GetValue = function() 
  24. return tempflag; 
  25. EventUtil.addEventHandler = function(obj,EventType,Handler) 
  26. //如果是FF 
  27. if(obj.addEventListener) 
  28. obj.addEventListener(EventType,Handler,false); 
  29. }  
  30. //如果是IE 
  31. else if(obj.attachEvent) 
  32. obj.attachEvent('on'+EventType,Handler); 
  33. }  
  34. else 
  35. obj['on'+EventType] = Handler; 
  36. //取消事件传入的参数值要跟绑定时完全一样才可以 
  37. EventUtil.removeEventHandler = function(obj,EventType,Handler) 
  38. //如果是FF 
  39. if(obj.removeEventListener) 
  40. obj.removeEventListener(EventType,Handler,false); 
  41. }  
  42. //如果是IE 
  43. else if(obj.detachEvent) 
  44. obj.detachEvent('on'+EventType,Handler); 
  45. }  
  46. else 
  47. obj['on'+EventType] = Handler; 
  48. function setEvent1(e) 
  49. ev = e;//针对火狐获取event相关属性  
  50. flag.SetMethod('addList1()'); 
  51. flag.SetValue (true); 
  52. function setEvent2(e) 
  53. ev = e;//针对火狐获取event相关属性 
  54. flag.SetMethod('addList2()'); 
  55. flag.SetValue (true); 
  56. function isSetEvent1(state) 
  57. isSetEv1 = state;//ie下方法名不能和全局变量名相同 
  58. function isSetEvent2(state) 
  59. isSetEv2 = state; 
  60. function add1(obj) 
  61. oncount1 = oncount1 + 1; 
  62. if(isSetEv1) 
  63. obj.innerHTML = "设置了事件,添加了 <b>" + oncount1 + "</b> 篇文章,左边列表1自动增加!"
  64. else 
  65. obj.innerHTML = "没有设置事件,添加了 <b>" + oncount1 + "</b> 篇文章,左边列表1没有变化!"
  66. function add2(obj) 
  67. oncount2 = oncount2 + 1; 
  68. if(isSetEv2) 
  69. obj.innerHTML = "设置了事件,添加了 <b>" + oncount2 + "</b> 篇文章,左边列表2自动增加!"
  70. else 
  71. obj.innerHTML = "没有设置事件,添加了 <b>" + oncount2 + "</b> 篇文章,左边列表2没有变化!"
  72. function addList1() 
  73. count1 = count1 + 1; 
  74. $("list1").innerHTML = "动态添加了 <b>" + count1 + "</b> 篇文章了!"
  75. function addList2() 
  76. count2 = count2 + 1; 
  77. $("list2").innerHTML = "动态添加了 <b>" + count2 + "</b> 篇文章了!"

再来看看一个简化的例子:

 

 
  1. //通用的添加和删除事件的方法(兼容IE和firefox) 
  2. function AddEventHandler(oTarget, sEventType, fnHandler){ 
  3. if (oTarget.addEventListener) {//非IE 
  4. oTarget.addEventListener(sEventType, fnHandler, false); 
  5. }else if (oTarget.attachEvent) {//IE 
  6. oTarget.attachEvent('on' + sEventType, fnHandler); 
  7. }else { 
  8. oTarget['on' + sEventType] = fnHandler; 
  9. function RemoveEventHandler(oTarget, sEventType, fnHandler){ 
  10. if (oTarget.removeEventListener) {//非IE 
  11. oTarget.removeEventListener(sEventType, fnHandler, false); 
  12. }else if (oTarget.detachEvent) {//IE 
  13. oTarget.detachEvent('on' + sEventType, fnHandler); 
  14. }else { 
  15. oTarget['on' + sEventType] = null

最后再来看一个完整的实例:

 

 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  3. <html xmlns="http://www.w3.org/1999/xhtml"
  4. <head> 
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  6. <title>JavaScript添加、删除事件的方法</title> 
  7. <script type="text/javascript"
  8. var EventUtil=new Object; 
  9. EventUtil.addEvent=function(oTarget,sEventType,funName){ 
  10. if(oTarget.addEventListener){//for DOM; 
  11. oTarget.addEventListener(sEventType,funName, false); 
  12. }else if(oTarget.attachEvent){ 
  13. oTarget.attachEvent("on"+sEventType,funName); 
  14. }else
  15. oTarget["on"+sEventType]=funName; 
  16. }; 
  17. EventUtil.removeEvent=function(oTarget,sEventType,funName){ 
  18. if(oTarget.removeEventListener){//for DOM; 
  19. oTarget.removeEventListener(sEventType,funName, false); 
  20. }else if(oTarget.detachEvent){ 
  21. oTarget.detachEvent("on"+sEventType,funName); 
  22. }else
  23. oTarget["on"+sEventType]=null
  24. }; 
  25. function removeClick(){ 
  26. alert("click"); 
  27. var oDiv=document.getElementById("odiv"); 
  28. oDiv.style.cursor="auto"
  29. EventUtil.removeEvent(oDiv,"click",removeClick); 
  30. function addLoadEvent(func){ 
  31. var oldonload=window.onload; 
  32. if(typeof window.onload !="function"){ 
  33. window.onload=func; 
  34. }else
  35. window.onload=function(){ 
  36. oldonload(); 
  37. func(); 
  38. addLoadEvent(addClick); 
  39. function addClick(){ 
  40. var oDiv=document.getElementById("odiv"); 
  41. oDiv.style.cursor="pointer"
  42. EventUtil.addEvent(oDiv,"click",removeClick); 
  43. </script> 
  44. </head> 
  45. <body> 
  46. <p>第一次点的时候弹出警告,并移除click事件,再点点击就失效了</p> 
  47. <div id="odiv" style="background:#003399; height:70px; width:126px; margin:0 auto; color:skyblue; ">第一次警告,第二次没反应!</div> 
  48. </body> 
  49. </html> 

希望本文所述对大家的javascript程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选