常用的JavaScript自定义函数

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常用的JavaScript自定义函数

JavaScript自定义函数在平时的开发过程中比较实用,这里介绍的是个最常用的十个JavaScript自定义函数主要涉及添加事件与移除事件等等。

(10)addEvent

网上最流行的版本是Scott Andrew的,据说javascript界曾举行一场比赛(此事件我们可以在Pro Javascript Techniques第100页看到)或浏览PPK的网站,征求添加事件与移除事件的函数,他就是其获奖者。下面就是他的实现:

1.function addEvent(elm, evType, fn, useCapture) {

2.if (elm.addEventListener) {

3. elm.addEventListener(evType, fn, useCapture);//DOM2.0

4.return true;

5. }

6.else if (elm.attachEvent) {

7. var r = elm.attachEvent('on' + evType, fn);//IE5+

8.return r;

9. }

10.else {

11. elm['on' + evType] = fn;//DOM 0

12. }

13.}

下面是Dean Edwards 的版本

14.// addEvent/removeEvent written by Dean Edwards, 2005

15.// with input from Tino Zijdel

16.// /weblog/2005/10/add-event/

17.function addEvent(element, type, handler) {

18.//为每一个事件处理函数分派一个唯一的ID

19.if (!handler.$$guid) handler.$$guid = addEvent.guid++;

20.//为元素的事件类型创建一个哈希表

21.if (!element.events) element.events = {};

22.//为每一个"元素/事件"对创建一个事件处理程序的哈希表

23. var handlers = element.events[type];

24.if (!handlers) {

25. handlers = element.events[type] = {};

26.//存储存在的事件处理函数(如果有)

27.if (element["on" + type]) {

28. handlers[0] = element["on" + type];

29. }

30. }

31.//将事件处理函数存入哈希表

32. handlers[handler.$$guid] = handler;

33.//指派一个全局的事件处理函数来做所有的工作

34. element["on" + type] = handleEvent;

35.};

36.//用来创建唯一的ID的计数器

37.addEvent.guid = 1;

38.function removeEvent(element, type, handler) {

39.//从哈希表中删除事件处理函数

40.if (element.events && element.events[type]) {

41. delete element.events[type][handler.$$guid];

42. }

43.};

44.function handleEvent(event) {

45. var returnValue = true;

46.//抓获事件对象(IE使用全局事件对象)

47.event = event || fixEvent(window.event);

48.//取得事件处理函数的哈希表的引用

49. var handlers = this.events[event.type];

50.//执行每一个处理函数

51.for (var i in handlers) {

52.this.$$handleEvent = handlers[i];

53.if (this.$$handleEvent(event) === false) {

54. returnValue = false;

55. } }

56.return returnValue;

57.};

58.//为IE的事件对象添加一些“缺失的”函数

59.function fixEvent(event) {

60.//添加标准的W3C方法

61.event.preventDefault = fixEvent.preventDefault;

62.event.stopPropagation = fixEvent.stopPropagation;

63.return event;

64.};

65.fixEvent.preventDefault = function() {

66.this.returnValue = false;

67.};

68.fixEvent.stopPropagation = function() {

69.this.cancelBubble = true;

70.};

功能非常强悍,解决IE的this指向问题,event总是作为第一个参数传入,跨浏览器就更不在话下。

另,我还珍藏了一个HTML5工作组的版本:

71.var addEvent=(function(){

72.if(document.addEventListener){

73.return function(el,type,fn){

74.if(el.length){

75.for(var i=0;i

76. addEvent(el[i],type,fn);

77. }

78. }else{

79. el.addEventListener(type,fn,false);

80. }

81. };

82. }else{

83.return function(el,type,fn){

84.if(el.length){

85.for(var i=0;i

86. addEvent(el[i],type,fn);

87. }

88. }else{

89. el.attachEvent('on'+type,function(){

90.return fn.call(el,window.event);

91. });

92. }

93. };

94. }

95.})();

(9)addLoadEvent()

相关文档
最新文档