{"id":2330,"date":"2012-04-01T18:06:42","date_gmt":"2012-04-01T10:06:42","guid":{"rendered":"http:\/\/www.zhangxinxu.com\/wordpress\/?p=2330"},"modified":"2018-01-02T01:25:55","modified_gmt":"2018-01-01T17:25:55","slug":"js-dom%e8%87%aa%e5%ae%9a%e4%b9%89%e4%ba%8b%e4%bb%b6","status":"publish","type":"post","link":"https:\/\/www.zhangxinxu.com\/wordpress\/2012\/04\/js-dom%e8%87%aa%e5%ae%9a%e4%b9%89%e4%ba%8b%e4%bb%b6\/","title":{"rendered":"\u6f2b\u8c08js\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u3001DOM\/\u4f2aDOM\u81ea\u5b9a\u4e49\u4e8b\u4ef6"},"content":{"rendered":"<p>by <a href=\"http:\/\/www.zhangxinxu.com\/\">zhangxinxu<\/a> from <a href=\"http:\/\/www.zhangxinxu.com\/\">http:\/\/www.zhangxinxu.com<\/a><br \/>\n\u672c\u6587\u5730\u5740\uff1a<a href=\"http:\/\/www.zhangxinxu.com\/wordpress\/?p=2330\">http:\/\/www.zhangxinxu.com\/wordpress\/?p=2330<\/a><\/p>\n<h3>\u4e00\u3001\u8bf4\u660e\u3001\u5f15\u8a00<\/h3>\n<p>\u6211JS\u8fd8\u662f\u6bd4\u8f83\u8584\u5f31\u7684\uff0c\u672c\u6587\u7684\u5185\u5bb9\u5c5e\u4e8e\u8fb9\u5b66\u8fb9\u60f3\u8fb9\u6298\u817e\u7684\u788e\u788e\u5ff5\uff0c\u53ef\u80fd\u6ca1\u4ec0\u4e48\u6761\u7406\uff0c\u53ef\u80fd\u6709\u8868\u8ff0\u4e0d\u51c6\u786e\u7684\u5730\u65b9\uff0c\u53ef\u80fd\u5185\u5bb9\u6bd4\u8f83\u62d7\u53e3\u751f\u50fb\u3002\u5982\u679c\u60a8\u65f6\u95f4\u7d27\u8feb\uff0c\u6216\u8005JS\u9020\u8be3\u5df2\u6df1\uff0c\u81f3\u6b64\u60a8\u5c31\u53ef\u4ee5\u70b9\u51fb\u53f3\u4fa7\u5e7f\u544a\uff08\u6728\u6709\uff1f\u5219RSS\u6216\u76d7\u7248\uff09\u7136\u540e\u64a4\u4e86\u3002<\/p>\n<p>\u4e8b\u4ef6\u662f\u4e2a\u5927\u8bfe\u9898\uff0c\u771f\u8981\u4ece\u65ad\u5976\u5f00\u59cb\u8bb2\u8d77\u7684\u8bdd\uff0c\u53ef\u4ee5\u5199\u4e2a12\u671f\u7684\u8fde\u8f7d\u3002\u5173\u4e8eJS\u4e8b\u4ef6\u7684\u6587\u7ae0\uff08\u7c7b\u4f3cDOM\/BOM\u4e8b\u4ef6\u6a21\u578b\uff0cIE\u4e0e\u5176\u4ed6\u6d4f\u89c8\u5668\u4e8b\u4ef6\u5dee\u5f02\uff0cDOM1\/DOM2\u4e8b\u4ef6\u5b9a\u4e49\u7b49\uff09\u843d\u53f6\u822c\u968f\u5904\u53ef\u89c1\u3002\u719f\u8c46\u5b50\u53cd\u590d\u7092\u4e00\u70b9\u610f\u601d\u90fd\u6ca1\u6709\uff0c\u56e0\u6b64\uff0c\u8fd9\u91cc\u8c08\u8c08\u81ea\u5df1\u611f\u5174\u8da3\u7684\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u4ee5\u53ca\u5468\u8fb9\u3002<\/p>\n<p>\u6240\u8c13\u81ea\u5b9a\u4e49\u4e8b\u4ef6\uff0c\u5c31\u662f\u6709\u522b\u4e8e\u6709\u522b\u4e8e\u5e26\u6709\u6d4f\u89c8\u5668\u7279\u5b9a\u884c\u4e3a\u7684\u4e8b\u4ef6(\u7c7b\u4f3c<code>click<\/code>, <code>mouseover<\/code>, <code>submit<\/code>, <code>keydown<\/code>\u7b49\u4e8b\u4ef6)\uff0c\u4e8b\u4ef6\u540d\u79f0\u53ef\u4ee5\u968f\u610f\u5b9a\u4e49\uff0c\u53ef\u4ee5\u901a\u8fc7\u7279\u5b9a\u7684\u65b9\u6cd5\u8fdb\u884c\u6dfb\u52a0\uff0c\u89e6\u53d1\u4ee5\u53ca\u5220\u9664\u3002<\/p>\n<h3>\u4e8c\u3001JS\u81ea\u5b9a\u4e49\u4e8b\u4ef6<\/h3>\n<p>\u5faa\u5e8f\u6e10\u8fdb\u4fbf\u4e8e\u63a5\u6536\u3002\u6162\u6162\u6765~~<\/p>\n<p>\u5148\u770b\u4e2a\u7b80\u5355\u7684\u4e8b\u4ef6\u6dfb\u52a0\u7684\u4f8b\u5b50\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>element.addEventListener(\"click\", function() {\n    <span style=\"color:green;\">\/\/ \u6211\u662f\u4e34\u65f6\u5de5<\/span>\n});<\/pre>\n<\/div>\n<p>\u8fd9\u662f\u4e2a\u7b80\u5355\u7684\u4e3aDOM\u5143\u7d20\u5206\u914d\u4e8b\u4ef6\u5904\u7406\u51fd\u6570\u7684\u65b9\u6cd5(IE \u4e0d\u652f\u6301)\uff0c\u6709\u522b\u4e8e\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>element.onclick = function() {\n   <span style=\"color:green;\">\/\/ \u6211\u662f\u4e34\u65f6\u5de5<\/span> \n};<\/pre>\n<\/div>\n<p><code>addEventListener()<\/code>\u53ef\u4ee5\u4e3a\u5143\u7d20\u5206\u914d\u591a\u4e2a\u5904\u7406\u51fd\u6570\uff08\u800c\u975e\u8986\u76d6\uff09\uff0c\u56e0\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u7ee7\u7eed\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>element.addEventListener(\"click\", function() {\n    <span style=\"color:green;\">\/\/ \u6211\u662f\u4e8c\u4ee3\u4e34\u65f6\u5de5<\/span>\n});<\/pre>\n<\/div>\n<p>\u7136\u540e\uff0c\u5f53<code>element<\/code>\u88abclick(\u70b9\u51fb)\u7684\u65f6\u5019\uff0c\u5c31\u4f1a\u8fde\u7eed\u89e6\u53d1\u201c\u4e34\u65f6\u5de5\u201d\u548c\u201c\u4e8c\u4ee3\u4e34\u65f6\u5de5\u201d\u51fd\u6570\u3002<\/p>\n<p><strong>\u62bd\u8c61\u2192\u5177\u8c61\u2192\u672c\u8d28\u2192\u6570\u636e\u5c42<\/strong><br \/>\u4f60\u6709\u6ca1\u6709\u89c9\u5f97\u8fd9\u79cd\u884c\u4e3a\u8868\u73b0\u6709\u70b9\u7c7b\u4f3c\u4e8e\u5f80\u957f\u67aa\u91cc\u9762\u585e\u5b50\u5f39(add)\uff0c\uff08\u6263\u52a8\u6273\u624b &#8211; click\uff09\u53d1\u5c04\u7684\u65f6\u5019\u6309\u7167\u585e\u8fdb\u53bb\u7684\u987a\u5e8f\u4f9d\u6b21\u51fa\u6765\u3002\u8fd9\u79cd\u884c\u4e3a\u8868\u73b0\u4e3a\u6211\u4eec\u5b9e\u73b0\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u63d0\u4f9b\u4e86\u601d\u8def\uff1a\u6211\u4eec\u53ef\u4ee5\u5b9a\u4e49\u4e00\u4e2a\u6570\u7ec4\uff0c\u5f53\u6dfb\u52a0\u4e8b\u4ef6\u7684\u65f6\u5019\uff0c\u6211\u4eecpush\u8fdb\u53bb\u8fd9\u4e2a\u4e8b\u4ef6\u5904\u7406\u51fd\u6570\uff1b\u5f53\u6211\u4eec\u6267\u884c\u7684\u65f6\u5019\uff0c\u4ece\u5934\u904d\u5386\u8fd9\u4e2a\u6570\u7ec4\u4e2d\u7684\u6bcf\u4e2a\u4e8b\u4ef6\u5904\u7406\u51fd\u6570\uff0c\u5e76\u6267\u884c\u3002<\/p>\n<p>\u5f53\u591a\u4e2a\u4e8b\u4ef6\u4ee5\u53ca\u5bf9\u5e94\u6570\u636e\u5904\u7406\u51fd\u6570\u6dfb\u52a0\u540e\uff0c\u6211\u4eec\u6700\u7ec8\u4f1a\u5f97\u5230\u4e00\u4e2a\u7c7b\u4f3c\u4e0b\u9762\u6570\u636e\u7ed3\u6784\u7684\u5bf9\u8c61\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>\n_listener = {\n    \"click\": [func1, func2],\n    \"custom\": [func3],\n    \"defined\": [func4, func5, func6]\n}\n<\/pre>\n<\/div>\n<p>\u56e0\u6b64\uff0c\u5982\u679c\u6211\u4eec\u8131\u79bbDOM, \u7eaf\u788e\u5728\u6570\u636e\u5c42\u9762\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u7684\u8bdd\uff0c\u6211\u4eec\u53ea\u8981\u4ee5\u6784\u5efa\u3001\u904d\u5386\u548c\u5220\u9664<code>_listener<\/code>\u5bf9\u8c61\u4e3a\u76ee\u7684\u5373\u53ef\u3002<\/p>\n<p><strong>\u51fd\u6570\u5f0f\u5b9e\u73b0<\/strong><br \/>\u8fd8\u662f\u90a3\u53e5\u8bdd\uff0c\u5faa\u5e8f\u6e10\u8fdb\uff0c\u6211\u4eec\u5148\u770b\u770b\u51fd\u6570\u5f0f\u7684\u5b9e\u73b0\uff08\u53ea\u5c55\u793a\u9aa8\u5e72\u4ee3\u7801\uff09\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>\nvar _listener = {};\nvar addEvent = function(type, fn) {\n    <span style=\"color:green;\">\/\/ \u6dfb\u52a0<\/span>\n};\nvar fireEvent = function(type) {\n    <span style=\"color:green;\">\/\/ \u89e6\u53d1<\/span>\n};\nvar removeEvent = function(type, fn) {\n    <span style=\"color:green;\">\/\/ \u5220\u9664<\/span>\n};\n<\/pre>\n<\/div>\n<p>\u4e0a\u9762\u7684\u4ee3\u7801\u867d\u7136\u663e\u5f97\u6bd4\u8f83\u521d\u7ea7\uff0c\u4f46\u662f\u76ee\u7684\u4ea6\u53ef\u5b9e\u73b0\u3002\u4f8b\u5982\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>addEvent(\"alert\", function() {\n    alert(\"\u5f39\u51fa\uff01\");\n});\n\n<span style=\"color:green;\">\/\/ \u89e6\u53d1\u81ea\u5b9a\u4e49alert\u4e8b\u4ef6<\/span>\nfireEvent(\"alert\");<\/pre>\n<\/div>\n<p>\u4f46\u662f\uff0c\u51fd\u6570\u5f0f\u5199\u6cd5\u7f3a\u70b9\u663e\u800c\u6613\u89c1\uff0c\u8fc7\u591a\u66b4\u9732\u5728\u5916\u7684\u5168\u5c40\u53d8\u91cf\uff08\u5168\u5c40\u53d8\u91cf\u662f\u9b54\u9b3c\uff09\uff0c\u65b9\u6cd5\u65e0\u7ea7\u8054\u7b49\u3002\u8fd9\u4e5f\u662f\u4e0a\u9762\u61d2\u5f97\u663e\u793a\u5b8c\u6574\u4ee3\u7801\u7684\u539f\u56e0\uff0c\u7565\u77e5\u5373\u53ef\u3002<\/p>\n<p><strong>\u5b57\u9762\u91cf\u5b9e\u73b0<\/strong><br \/>\u4f17\u6240\u5468\u77e5\uff0c\u51cf\u5c11\u5168\u5c40\u53d8\u91cf\u7684\u65b9\u6cd5\u4e4b\u4e00\u5c31\u662f\u4f7f\u7528\u5168\u5c40\u53d8\u91cf\uff08\u5176\u4ed6\u5982\u95ed\u5305\uff09\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u7a0d\u4f5c\u8c03\u6574\uff08\u4ee3\u7801\u8f83\u957f\uff0c\u4e3a\u9650\u5236\u7bc7\u5e45\uff0c\u4f7f\u7528\u4e86\u6eda\u52a8\u6761\uff0c<a href=\"javascript:\" id=\"togglePreBtn\" title=\"\u70b9\u51fb\u8fdb\u884c\u5c55\u5f00\u4e0e\u6536\u8d77\u7684JS\u4ea4\u4e92\">\u5b8c\u6574\u663e\u793a\u70b9\u51fb\u8fd9\u91cc<\/a> &#8211; <span style=\"color:#999;\">JS\u4ea4\u4e92,  RSS\u4e2d\u65e0\u6548\u679c<\/span>\uff09\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre id=\"longPreCode\" style=\"height:200px; padding:5px; overflow:auto; resize:both; background-color:#fff;\">var Event = {\n    _listeners: {},    \n    <span style=\"color:green;\">\/\/ \u6dfb\u52a0<\/span>\n    <span style=\"color:#cd0000;\">addEvent<\/span>: function(type, fn) {\n        if (typeof this._listeners[type] === \"undefined\") {\n            this._listeners[type] = [];\n        }\n        if (typeof fn === \"function\") {\n            this._listeners[type].push(fn);\n        }    \n        return this;\n    },\n    <span style=\"color:green;\">\/\/ \u89e6\u53d1<\/span>\n    <span style=\"color:#cd0000;\">fireEvent<\/span>: function(type) {\n        var arrayEvent = this._listeners[type];\n        if (arrayEvent instanceof Array) {\n            for (var i=0, length=arrayEvent.length; i&lt;length; i+=1) {\n                if (typeof arrayEvent[i] === \"function\") {\n                    arrayEvent[i]({ type: type });    \n                }\n            }\n        }    \n        return this;\n    },\n    <span style=\"color:green;\">\/\/ \u5220\u9664<\/span>\n    <span style=\"color:#cd0000;\">removeEvent<\/span>: function(type, fn) {\n    \tvar arrayEvent = this._listeners[type];\n        if (typeof type === \"string\" && arrayEvent instanceof Array) {\n            if (typeof fn === \"function\") {\n                <span style=\"color:green;\">\/\/ \u6e05\u9664\u5f53\u524dtype\u7c7b\u578b\u4e8b\u4ef6\u4e0b\u5bf9\u5e94fn\u65b9\u6cd5<\/span>\n                for (var i=0, length=arrayEvent.length; i&lt;length; i+=1){\n                    if (arrayEvent[i] === fn){\n                        this._listeners[type].splice(i, 1);\n                        break;\n                    }\n                }\n            } else {\n                <span style=\"color:green;\">\/\/ \u5982\u679c\u4ec5\u4ec5\u53c2\u6570type, \u6216\u53c2\u6570fn\u90aa\u9b54\u5916\u9053\uff0c\u5219\u6240\u6709type\u7c7b\u578b\u4e8b\u4ef6\u6e05\u9664<\/span>\n                delete this._listeners[type];\n            }\n        }\n        return this;\n    }\n};<\/pre>\n<\/div>\n<p>\u4f7f\u7528\u7c7b\u4f3c\u4e0b\u9762\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>Event.<span style=\"color:#cd0000;\">addEvent<\/span>(\"alert\", function() {\n    alert(\"\u5f39\u51fa\uff01\");\n});\n\n<span style=\"color:green;\">\/\/ \u89e6\u53d1\u81ea\u5b9a\u4e49alert\u4e8b\u4ef6<\/span>\nEvent.<span style=\"color:#cd0000;\">fireEvent<\/span>(\"alert\");<\/pre>\n<\/div>\n<p>\u60a8\u53ef\u4ee5\u72e0\u72e0\u5730\u70b9\u51fb\u8fd9\u91cc\uff1a<a class=\"a_link\" target=\"_blank\" href=\"http:\/\/www.zhangxinxu.com\/study\/201203\/js-custom-events-literal.html\">JS\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u5b57\u9762\u91cf\u4e66\u5199demo<\/a><\/p>\n<p>\u9ed8\u8ba4\u9875\u9762<code>document<\/code>\u901a\u8fc7<code>Event.addEvent()<\/code>\u7ed1\u5b9a\u4e86\u4e24\u4e2a\u81ea\u5b9a\u4e49\u7684<code>alert<\/code>\u4e8b\u4ef6\uff0c\u56e0\u6b64\uff0c\u6b64\u65f6\u60a8\u70b9\u51fb\u9875\u9762\u7684\u7a7a\u767d\u533a\u57df\uff08\u975e\u6309\u94ae\u4e0e\u793a\u4f8b\u4ee3\u7801\u533a\u57df\uff09\uff0c\u5c31\u4f1a\u6709\u5982\u4e0b\u56fe\u6240\u793a\u7684\u8fde\u7eed\u4e24\u4e2aalert\u6846\uff1a<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/image.zhangxinxu.com\/image\/blog\/201203\/2012-03-30_212105.png\" width=\"279\" height=\"180\" \/> <img loading=\"lazy\" decoding=\"async\" src=\"\nhttp:\/\/image.zhangxinxu.com\/image\/blog\/201203\/2012-03-30_212127.png\" width=\"276\" height=\"180\" \/><\/p>\n<p>demo\u9875\u9762\u8fd8\u6709\u4e24\u4e2a\u6309\u94ae\uff0c\u7528\u6765\u6e05\u9664\u5df2\u7ecf\u7ed1\u5b9a\u7684<code>alert<\/code>\u4e8b\u4ef6\u3002\u7b2c\u4e00\u4e2a\u6309\u94ae\u6e05\u9664\u6240\u6709<code>alert<\/code>\u4e8b\u4ef6\uff0c\u800c\u70b9\u51fb\u7b2c\u4e8c\u4e2a\u6309\u94ae\u6e05\u9664\u7b2c\u4e00\u4e2a<code>alert<\/code>\u4e8b\u4ef6\u3002\u4f8b\u5982\u6211\u4eec\u70b9\u51fb\u7b2c\u4e8c\u4e2a\u6309\u94ae\uff1a<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/image.zhangxinxu.com\/image\/blog\/201203\/2012-03-30_212553.png\" width=\"298\" height=\"111\" \/><\/p>\n<p>\u6e05\u9664\u5b8c\u6bd5\u540e\u518d\u70b9\u51fb\u9875\u9762\u7684\u7a7a\u767d\u533a\u57df\uff0c \u60a8\u4f1a\u53d1\u73b0\u53ea\u4f1a\u5f39\u51fa\u201c\u7b2c\u4e8c\u4e2a\u5f39\u51fa\uff01\u201d\u5b57\u6837\u7684\u5f39\u51fa\u6846\u4e86\u3002\u8fd9\u8868\u660e\uff0c\u7b2c\u4e00\u4e2a\u7ed1\u5b9a\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u88abremove\u6389\u4e86\u3002<\/p>\n<p>\u5b57\u9762\u91cf\u5b9e\u73b0\u867d\u7136\u51cf\u5c11\u4e86\u5168\u5c40\u53d8\u91cf\uff0c\u4f46\u662f\u5176\u5c5e\u6027\u65b9\u6cd5\u7b49\u90fd\u662f\u66b4\u9732\u800c\u4e14\u90fd\u662f\u552f\u4e00\u7684\uff0c\u4e00\u65e6\u67d0\u4e2a\u5173\u952e\u5c5e\u6027(\u5982<code>_listeners<\/code>)\u4e0d\u5c0f\u5fc3\u5728\u67d0\u4e8b\u4ef6\u5904reset\u4e86\u4e0b\uff0c\u5219\u6574\u4e2a\u5168\u5c40\u7684\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u90fd\u4f1a\u5d29\u6e83\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u8fdb\u4e00\u6b65\u6539\u8fdb\uff0c\u4f8b\u5982\uff0c\u4f7f\u7528\u539f\u578b\u94fe\u7ee7\u627f\uff0c\u8ba9\u7ee7\u627f\u7684\u5c5e\u6027(\u5982<code>_listeners<\/code>)\u5373\u4f7f\u51fa\u95ee\u9898\u4e5f\u4e0d\u4f1a\u5f71\u54cd\u5168\u5c40\u3002<\/p>\n<p><strong>\u539f\u578b\u6a21\u5f0f\u5b9e\u73b0<\/strong><br \/>\u4ee3\u7801\u5982\u4e0b\uff08\u76f8\u6bd4\u4e0a\u9762\u589e\u52a0\u4e86<code>addEvents<\/code>, <code>fireEvents<\/code>, <code>removeEvents<\/code>\u591a\u4e8b\u4ef6\u7ed1\u5b9a\u3001\u6267\u884c\u4e0e\u5220\u9664\u65b9\u6cd5\uff0c\u7bc7\u5e45\u8f83\u957f\uff0c\u589e\u52a0\u6eda\u52a8\u9650\u9ad8\uff0c<a href=\"javascript:\" id=\"togglePreBtn2\">\u70b9\u51fb\u8fd9\u91cc\u5b8c\u6574\u5c55\u793a<\/a> &#8211; <span style=\"color:#999;\">JS\u4ea4\u4e92,  RSS\u4e2d\u65e0\u6548\u679c<\/span>\uff09\uff08\u4e00\u5806\u4ee3\u7801\u770b\u5f97\u5934\u5927\uff0c\u5efa\u8bae\u76f4\u63a5\u8df3\u8fc7\uff09\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre id=\"longPreCode2\" style=\"height:200px; padding:5px; overflow:auto; resize:both; background-color:#fff;\">var EventTarget = function() {\n    this._listener = {};\n};\n\nEventTarget.prototype = {\n    constructor: this,\n    <span style=\"color:#cd0000;\">addEvent<\/span>: function(type, fn) {\n        if (typeof type === \"string\" &amp;&amp; typeof fn === \"function\") {\n            if (typeof this._listener[type] === \"undefined\") {\n                this._listener[type] = [fn];\n            } else {\n                this._listener[type].push(fn);    \n            }\n        }\n        return this;\n    },\n    <span style=\"color:#cd0000;\">addEvents<\/span>: function(obj) {\n        obj = typeof obj === \"object\"? obj : {};\n        var type;\n        for (type in obj) {\n            if ( type &amp;&amp; typeof obj[type] === \"function\") {\n                this.addEvent(type, obj[type]);    \n            }\n        }\n        return this;\n    },\n    <span style=\"color:#cd0000;\">fireEvent<\/span>: function(type) {\n        if (type &amp;&amp; this._listener[type]) {\n            var events = {\n                type: type,\n                target: this    \n            };\n            \n            for (var length = this._listener[type].length, start=0; start&lt;length; start+=1) {\n                this._listener[type][start].call(this, events);\n            }\n        }\n        return this;\n    },\n    <span style=\"color:#cd0000;\">fireEvents<\/span>: function(array) {\n        if (array instanceof Array) {\n            for (var i=0, length = array.length; i&lt;length; i+=1) {\n                this.fireEvent(array[i]);\n            }\n        }\n        return this;\n    },\n    <span style=\"color:#cd0000;\">removeEvent<\/span>: function(type, key) {\n        var listeners = this._listener[type];\n        if (listeners instanceof Array) {\n            if (typeof key === \"function\") {\n                for (var i=0, length=listeners.length; i&lt;length; i+=1){\n                    if (listeners[i] === key){\n                        listeners.splice(i, 1);\n                        break;\n                    }\n                }\n            } else if (key instanceof Array) {\n                for (var lis=0, lenkey = key.length; lis&lt;lenkey; lis+=1) {\n                    this.removeEvent(type, key[lenkey]);\n                }\n            } else {\n                delete this._listener[type];\n            }\n        }\n        return this;\n    },\n    <span style=\"color:#cd0000;\">removeEvents<\/span>: function(params) {\n        if (params instanceof Array) {\n            for (var i=0, length = params.length; i&lt;length; i+=1) {\n                this.removeEvent(params[i]);\n            }    \n        } else if (typeof params === \"object\") {\n            for (var type in params) {\n                this.removeEvent(type, params[type]);    \n            }\n        }\n        return this;    \n    }\n};<\/pre>\n<\/div>\n<p>\u5570\u54e9\u5427\u55e6\u7684\u4ee3\u7801\u76f4\u63a5\u8df3\u8fc7\uff0c\u5176\u5b9e\u4e0a\u9762\u4ee3\u7801\u8ddf\u5b57\u9762\u91cf\u65b9\u6cd5\u76f8\u6bd4\uff0c\u5c31\u662f\u589e\u52a0\u4e86\u4e0b\u9762\u70b9\u4e1c\u897f\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>var EventTarget = function() {\n    this._listener = {};\n};\n\nEventTarget.prototype = {\n    constructor: this,\n    <span style=\"color:green;\">\/\/ .. \u5b8c\u5168\u5c31\u662f\u5b57\u9762\u91cf\u6a21\u5f0f\u5b9e\u73b0\u811a\u672c<\/span>\n};<\/pre>\n<\/div>\n<p>\u7136\u540e\uff0c\u9700\u8981\u5b9e\u73b0\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u529f\u80fd\u65f6\u5019\uff0c\u5148<code>new<\/code>\u6784\u9020\u4e0b\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>var myEvents = new EventTarget();\nvar yourEvents = new EventTarget();<\/pre>\n<\/div>\n<p>\u8fd9\u6837\uff0c\u5373\u4f7f<code>myEvents<\/code>\u7684\u4e8b\u4ef6\u5bb9\u5668<code>_listener<\/code>\u8ddb\u6389\uff0c\u4e5f\u4e0d\u4f1a\u6c61\u67d3<code>yourEvents<\/code>\u4e2d\u7684\u81ea\u5b9a\u4e49\u4e8b\u4ef6(<code>_listener<\/code>\u5b89\u7136\u65e0\u6059)\u3002<\/p>\n<p>\u60a8\u53ef\u4ee5\u72e0\u72e0\u5730\u70b9\u51fb\u8fd9\u91cc\uff1a<a target=\"_blank\" class=\"a_link\" href=\"http:\/\/www.zhangxinxu.com\/study\/201203\/js-custom-events-prototypal.html\">\u539f\u578b\u6a21\u5f0f\u4e0b\u7684JS\u81ea\u5b9a\u4e49\u4e8b\u4ef6demo<\/a><\/p>\n<p>\u4ecedemo\u53f3\u534a\u533a\u57df\u7684\u6e90\u4ee3\u7801\u5c55\u793a\u53ef\u4ee5\u770b\u51fa\u5982\u4f55\u4f7f\u7528<code>addEvents<\/code>, <code>fireEvents<\/code>\u65b9\u6cd5\u540c\u65f6\u6dfb\u52a0\u548c\u89e6\u53d1\u591a\u4e2a\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u7684\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/image.zhangxinxu.com\/image\/blog\/201203\/2012-03-31_165054.png\" width=\"492\" height=\"322\" \/><\/p>\n<p style=\"color:#888;\">\/\/zxx: \u4e0b\u9762\u4e3a\u5e7f\u544a~~\u6ce8\u610f\u4e0d\u8981\u52ff\u70b9~~\u563b\u563b~~<\/p>\n<div style=\"width:468px; padding:5px; background-color:#cad5eb;\">\n<script type=\"text\/javascript\">google_ad_client = \"ca-pub-0090627341039040\";google_ad_slot = \"6836958449\";google_ad_width = 468;google_ad_height = 60;<\/script><script type=\"text\/javascript\" src=\"http:\/\/pagead2.googlesyndication.com\/pagead\/show_ads.js\"><\/script>\n<\/div>\n<div class=\"hidden\"><em>\u5982\u679c\u60a8\u770b\u5230\u4e0b\u9762\u7684\u6587\u5b57\uff0c\u53ef\u80fd\u662f\u7531\u4e8e\u5728\u5176\u4ed6\u7f51\u7ad9\u6216\u662fRSS\u4e2d\u9605\u8bfb\u672c\u6587\uff0c\u672c\u6587\u539f\u5730\u5740\uff1a<a href=\"http:\/\/www.zhangxinxu.com\/wordpress\/?p=2330\">http:\/\/www.zhangxinxu.com\/wordpress\/?p=2330<\/a>\uff0c\u672c\u6587\u4f5c\u8005\uff1a<a href=\"http:\/\/www.zhangxinxu.com\/\">\u5f20\u946b\u65ed<\/a>\uff0c\u6765\u81ea\u5f20\u946b\u65ed-\u946b\u7a7a\u95f4-\u946b\u751f\u6d3b\uff0c\u8bbf\u95ee\u539f\u51fa\u5904\u9605\u8bfb\u4f53\u9a8c\u66f4\u4f73\u3002<\/em><\/div>\n<h3>\u4e09\u3001DOM\u81ea\u5b9a\u4e49\u4e8b\u4ef6<\/h3>\n<p>\u6211\u4eec\u5e73\u5e38\u6240\u4f7f\u7528\u7684\u4e8b\u4ef6\u57fa\u672c\u90fd\u662f\u4e0eDOM\u5143\u7d20\u76f8\u5173\u7684\uff0c\u4f8b\u5982\u70b9\u51fb\u6309\u94ae\uff0c\u6587\u672c\u8f93\u5165\u7b49\uff0c\u8fd9\u4e9b\u4e3a\u81ea\u5e26\u6d4f\u89c8\u5668\u884c\u4e3a\u4e8b\u4ef6\uff0c\u800c\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u4e0e\u8fd9\u4e9b\u884c\u4e3a\u65e0\u5173\u3002\u4f8b\u5982\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>element.addEventListener(\"alert\", function() {\n    alert(\"\u5f39\u51fa\uff01\");\n});<\/pre>\n<\/div>\n<p>\u8fd9\u91cc\u7684<code>alert<\/code>\u5c31\u5c5e\u4e8e\u81ea\u5b9a\u4e49\u4e8b\u4ef6\uff0c\u540e\u9762\u7684<code>function<\/code>\u5c31\u662f\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u51fd\u6570\u3002\u800c\u8fd9\u4e2a\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u662f\u76f4\u63a5\u7ed1\u5b9a\u5728\u540d\u4e3a<code>element<\/code>\u7684DOM\u5143\u7d20\u4e0a\u7684\uff0c\u56e0\u6b64\uff0c\u8fd9\u4e2a\u79f0\u4e4b\u4e3a\u81ea\u5b9a\u4e49DOM\u4e8b\u4ef6\u3002<\/p>\n<p>\u7531\u4e8e\u6d4f\u89c8\u5668\u7684\u5dee\u5f02\uff0c\u4e0a\u9762\u7684<code>addEventListener<\/code>\u5728IE\u6d4f\u89c8\u5668\u4e0b\u6df7\u4e0d\u6765(<code>attachEvent<\/code>\u4ee3\u66ff)\uff0c\u56e0\u6b64\uff0c\u4e3a\u4e86\u4fbf\u4e8e\u89c4\u6a21\u4f7f\u7528\uff0c\u6211\u4eec\u9700\u8981\u65b0\u7684\u6dfb\u52a0\u4e8b\u4ef6\u65b9\u6cd5\u540d\uff08\u5408\u5e76<code>addEventListener<\/code>\u548c<code>attachEvent<\/code>\uff09\uff0c\u4f8b\u5982<code>addEvent<\/code>, \u5e76\u9644\u5e26\u4e8b\u4ef6\u89e6\u53d1\u65b9\u6cd5<code>fireEvent<\/code>, \u5220\u9664\u4e8b\u4ef6\u65b9\u6cd5<code>removeEvent<\/code>\uff0c(\u547d\u540d\u5747\u53c2\u8003\u81eaMooTools\u5e93)\u3002<\/p>\n<p>\u5982\u4f55\u76f4\u63a5\u5728DOM\u4e0a\u6269\u5c55\u65b0\u7684\u4e8b\u4ef6\u5904\u7406\u65b9\u6cd5\uff0c\u4ee5\u53ca\u6267\u884c\u81ea\u5b9a\u4e49\u7684\u4e8b\u4ef6\u5462\uff1f<\/p>\n<p>\u5982\u679c\u4e0d\u8003\u8651IE6\/7\u6d4f\u89c8\u5668\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u5728DOM\u4e0a\u8fdb\u884c\u65b9\u6cd5\u6269\u5c55\u3002\u4f8b\u5982\u6dfb\u52a0\u4e2a<code>addEvent<\/code>\u65b9\u6cd5\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>\n<span style=\"color:#909;\">HTMLElement<\/span>.<span style=\"color:#069;\">prototype<\/span>.<span style=\"color:#cd0000;\">addEvent<\/span> = function(type, fn, capture) {\n    var el = this;\n    if (window.addEventListener) {\n        el.addEventListener(type, function(e) {\n            fn.call(el, e);\n        }, capture);\n    } else if (window.attachEvent) {\n        el.attachEvent(\"on\" + type, function(e) {\n            fn.call(el, e);\n        });\n    } \n};<\/pre>\n<\/div>\n<style>.s code{color:#666;}<\/style>\n<p style=\"color:#888; font-family:simsun;\"><span class=\"s\">\/\/zxx: \u4e0a\u9762\u4ee3\u7801\u4e2d\u7684<code>HTMLElement<\/code>\u8868\u793aHTML\u5143\u7d20\u3002\u4ee5\u4e00\u4e2a<code>&lt;p&gt;<\/code>\u6807\u7b7e\u5143\u7d20\u4e3e\u4f8b\uff0c\u5176\u5411\u4e0a\u5bfb\u627e\u539f\u578b\u5bf9\u8c61\u7528\u8fc7\u4f1a\u662f\u8fd9\u6837\uff1a<code>HTMLParagraphElement.prototype<\/code> \u2192 <code>HTMLElement.prototype<\/code> \u2192 <code>Element.prototype<\/code> \u2192 <code>Node.prototype<\/code> \u2192 <code>Object.prototype<\/code> \u2192 <code>null<\/code>\u3002\u8fd9\u4e0b\u60a8\u5e94\u8be5\u77e5\u9053<code>HTMLElement<\/code>\u6240\u5904\u7684\u4f4d\u7f6e\u4e86\u5427\uff0c\u4e0a\u8ff0\u4ee3\u7801<code>HTMLElement<\/code>\u76f4\u63a5\u6362\u6210<code>Element<\/code>\u4e5f\u662f\u53ef\u4ee5\u7684\uff0c\u4f46\u662f\u4f1a\u8ba9\u5176\u4ed6\u5143\u7d20\uff08\u4f8b\u5982\u6587\u672c\u5143\u7d20\uff09\u4e5f\u6269\u5c55<code>addEvent<\/code>\u65b9\u6cd5\uff0c\u6709\u4e9b\u6d6a\u8d39\u4e86\u3002<\/span><\/p>\n<p>\u8fd9\u6837\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u4f7f\u7528\u6269\u5c55\u7684\u65b0\u65b9\u6cd5\u7ed9\u5143\u7d20\u6dfb\u52a0\u4e8b\u4ef6\u4e86\uff0c\u4f8b\u5982\u4e00\u4e2a\u56fe\u7247\u5143\u7d20\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>elImage.addEvent(\"click\", function() {\n    alert(\"\u6211\u662f\u70b9\u51fb\u56fe\u7247\u4e4b\u540e\u7684\u5f39\u51fa\uff01\");\n});<\/pre>\n<\/div>\n<p>\u7531\u4e8eIE6, IE7\u6d4f\u89c8\u5668\u7684DOM\u6c34\u5e73\u8f83\u4f4e\uff0c\u65e0\u6cd5\u76f4\u63a5\u8fdb\u884c\u6269\u5c55\uff0c\u56e0\u6b64\uff0c\u539f\u578b\u6269\u5c55\u7684\u65b9\u6cd5\u5728\u8fd9\u4e24\u4e2a\u6d4f\u89c8\u5668\u4e0b\u662f\u884c\u4e0d\u901a\u7684\u3002\u8981\u60f3\u8ba9\u8fd9\u4e24\u4e2a\u6d4f\u89c8\u5668\u4e5f\u652f\u6301<code>addEvent<\/code>\u65b9\u6cd5\uff0c\u53ea\u80fd\u662f\u9875\u9762\u8f7d\u5165\u65f6\u5019\u904d\u5386\u6240\u6709DOM\uff0c\u7136\u540e\u6bcf\u4e2a\u90fd\u76f4\u63a5\u6dfb\u52a0<code>addEvent<\/code>\u65b9\u6cd5\u4e86\u3002<\/p>\n<div class=\"zxx_code\">\n<pre>var elAll = <span style=\"color:#069;\">document.all<\/span>, lenAll = elAll.length;\nfor (var iAll=0; iAll&lt;lenAll; iAll+=1) {\n    elAll[iAll].<span style=\"color:#cd0000;\">addEvent<\/span> = function(type, fn) {\n        var el = this;\n        el.attachEvent(\"on\" + type, function(e) {\n            fn.call(el, e);\n        });\n    };\n}<\/pre>\n<\/div>\n<p>\u60a8\u53ef\u4ee5\u72e0\u72e0\u5730\u70b9\u51fb\u8fd9\u91cc\uff1a<a class=\"a_link\" target=\"_blank\" href=\"http:\/\/www.zhangxinxu.com\/study\/201203\/js-dom-events-extend-by-prototype.html\">\u57fa\u4e8eDOM\u6269\u5c55\u81ea\u5b9a\u4e49\u65b9\u6cd5demo<\/a><\/p>\n<p>\u70b9\u51fbdemo\u9875\u9762\u5f20\u542b\u97f5\u5c0f\u59d0\u5e74\u8f7b\u65f6\u5019\u76f8\u7247\uff0c\u5c31\u4f1a\u6709\u8be5\u56fe\u7247<code>alt<\/code>\u5c5e\u6027\u503c\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/image.zhangxinxu.com\/image\/blog\/201203\/2012-03-31_232024.png\" width=\"413\" height=\"220\" \/><\/p>\n<p>\u6d4b\u8bd5\u4ee3\u7801\u5982\u4e0b(demo\u9875\u9762\u6709\u4ee3\u7801\u5b8c\u6574\u5c55\u793a)\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>&lt;img id=\"image\" src=\"http:\/\/image.zhangxinxu.com\/image\/study\/s\/s256\/mm1.jpg\" alt=\"\u5e74\u8f7b\u7684\u5f20\u542b\u97f5\" \/>\n\ndocument.getElementById(\"image\").<span style=\"color:#cd0000;\">addEvent<\/span>(\"click\", function() {\n    alert(\"\u8fd9\u662f\uff1a\" + this.alt);    \n});<\/pre>\n<\/div>\n<p><strong>\u53ea\u80fd\u70b9\u5230\u4e3a\u6b62<\/strong><br \/>\u76f4\u63a5\u5728DOM\u4e0a\u8fdb\u884c\u4e8b\u4ef6\u65b9\u6cd5\u6269\u5c55\u5176\u5b9e\u662f\u4e2a\u7cdf\u7cd5\u7684\u505a\u6cd5\uff0c\u56e0\u6b64\uff0c\u8fd9\u91cc\u6211\u5e76\u6ca1\u6709\u5bf9\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u505a\u8fdb\u4e00\u6b65\u6df1\u5165\u63a2\u8ba8\uff08\u8fd9\u4e2a\u4e0b\u4e00\u90e8\u5206\u4f1a\u8bb2\uff09\u3002<\/p>\n<p>\u57fa\u4e8eDOM\u6269\u5c55\u7f3a\u70b9\u6709\uff1a\u7f3a\u5c11\u6807\u51c6\u65e0\u89c4\u5f8b\u3001\u63d0\u9ad8\u51b2\u7a81\u53ef\u80fd\u6027\u3001\u6027\u80fd\u4ee5\u53ca\u6d4f\u89c8\u5668\u652f\u6301\u3002<br \/>\u6269\u5c55\u540d\u5b57\u4efb\u610f\u547d\uff0c\u5f88\u6709\u53ef\u80fd\u5c31\u4f1a\u4e0e\u672a\u6765DOM\u6d4f\u89c8\u5668\u672c\u8eab\u652f\u6301\u7684\u65b9\u6cd5\u76f8\u4e92\u51b2\u7a81\uff1b\u6269\u5c55\u65e0\u89c4\u5f8b\uff0c\u5f88\u6709\u53ef\u80fd\u51fa\u73b0A\u548cB\u540c\u540d\u4e0d\u540c\u529f\u80fd\u7684\u6269\u5c55\u800c\u9020\u6210\u51b2\u7a81\uff1bIE6-7\u6d4f\u89c8\u5668\u4e0b\u6240\u6709\u6269\u5c55\u90fd\u8981\u901a\u8fc7\u904d\u5386\u652f\u6301\uff0c\u5176\u6027\u80fd\u5f00\u9500\u53ef\u60f3\u800c\u77e5\uff1b\u53e6\u5916IE8\u5bf9DOM\u6269\u5c55\u7684\u652f\u6301\u5e76\u4e0d\u5b8c\u6574\uff0c\u4f8b\u5982\u5176\u652f\u6301<code>Element.prototype<\/code>\uff0c\u5374\u6ca1\u6709<code>HTMLElement.prototype<\/code>.<\/p>\n<p>\u867d\u7136\u6211\u4ece\u4e8b\u7684\u7ad9\u70b9\u5c31\u662f\u57fa\u4e8eMooTools\u5e93\u7684\uff0c\u4f46\u662f\uff0c\u6211\u5bf9MooTools\u5e93\u57fa\u4e8eDOM\u6269\u5c55\u65b9\u6cd5\u7684\u505a\u6cd5\u662f\u4e0d\u652f\u6301\u7684\u3002\u76f8\u53cd\uff0c\u6211\u66f4\u4eb2\u8fd1jQuery\u5e93\u7684\u505a\u6cd5\uff0c\u4e5f\u5c31\u662f\u4e0b\u9762\u8981\u8bb2\u7684\u201c\u4f2aDOM\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u201d\u3002<\/p>\n<h3>\u56db\u3001\u4f2aDOM\u81ea\u5b9a\u4e49\u4e8b\u4ef6<\/h3>\n<p>\u8fd9\u91cc\u7684\u201c\u4f2aDOM\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u201d\u662f\u81ea\u5df1\u5b9a\u4e49\u7684\u4e00\u4e2a\u540d\u8bcd\uff0c\u7528\u6765\u533a\u5206DOM\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u7684\u3002\u4f8b\u5982jQuery\u5e93\uff0c\u5176\u662f\u57fa\u4e8e\u5305\u88c5\u5668\uff08\u4e00\u4e2a\u5305\u542bDOM\u5143\u7d20\u7684\u4e2d\u95f4\u5c42\uff09\u6269\u5c55\u4e8b\u4ef6\u7684\uff0c\u65e2\u4e0eDOM\u76f8\u5173\uff0c\u53c8\u4e0d\u76f4\u63a5\u662fDOM\uff0c\u56e0\u6b64\uff0c\u79f0\u4e4b\u4e3a\u201c\u4f2aDOM\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u201d\u3002<\/p>\n<p style=\"color:#888;\"><span class=\"s\">\/\/zxx: \u4e0b\u9762\u5373\u5c06\u5c55\u793a\u7684\u4ee3\u7801\u76ee\u7684\u5728\u4e8e\u5b66\u4e60\u4e0e\u8ba4\u8bc6\uff0c\u8981\u60f3\u5b9e\u9645\u5e94\u7528\u53ef\u80fd\u8fd8\u9700\u8981\u5728\u7ec6\u8282\u4e0a\u505a\u4e9b\u8c03\u6574\u3002\u4f8b\u5982\uff0c\u4e0b\u9762\u6d4b\u8bd5\u7684\u5305\u88c5\u5668\u4ec5\u4ec5\u53ea\u662f\u5305\u88f9DOM\u5143\u7d20\uff0c\u5e76\u975e\u9009\u62e9\u5668\u4e4b\u7c7b\uff1b<code>$<\/code>\u7b26\u53f7\u672a\u589e\u52a0\u51b2\u7a81\u5904\u7406\uff0c\u4e14\u51e0\u4e2a\u91cd\u8981\u65b9\u6cd5\u90fd\u66b4\u9732\u5728\u5168\u5c40\u73af\u5883\u4e2d\uff0c\u6ca1\u6709\u95ed\u5305\u4fdd\u62a4\u7b49\u3002<\/span><\/p>\n<p>\u539f\u578b\u4ee5\u53ca<code>new<\/code>\u51fd\u6570\u6784\u9020\u4e0d\u662f\u672c\u6587\u91cd\u70b9\uff0c\u56e0\u6b64\uff0c\u4e0b\u9762\u8fd9\u4e2a\u4ec5\u5c55\u793a\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>var $ = function(el) {\n    return new _$(el);    \n};\nvar _$ = function(el) {\n    this.el = el;\n};\n_$.prototype = {\n    constructor: this,\n    addEvent: function() {\n        <span style=\"color:green;\">\/\/ ...<\/span>\n    },\n    fireEvent: function() {\n        <span style=\"color:green;\">\/\/ ...<\/span>\n    },\n    removeEvent: function() {\n        <span style=\"color:green;\">\/\/ ...<\/span>\n    }\n}<\/pre>\n<\/div>\n<p>\u4e8e\u662f\u6211\u4eec\u5c31\u53ef\u4ee5\u4f7f\u7528\u7c7b\u4f3c<code>$(dom).addEvent()<\/code>\u7684\u8bed\u6cd5\u4e3a\u5143\u7d20\u6dfb\u52a0\u4e8b\u4ef6\u4e86\uff08\u5305\u62ec\u4e0d\u5305\u542b\u6d4f\u89c8\u5668\u884c\u4e3a\u7684\u81ea\u5b9a\u4e49\u4e8b\u4ef6\uff09\u3002<\/p>\n<p><strong>\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u7684\u6dfb\u52a0<\/strong><br \/>\u5982\u679c\u53ea\u8003\u8651\u4e8b\u4ef6\u6dfb\u52a0\uff0c\u6211\u4eec\u7684\u5de5\u4f5c\u5176\u5b9e\u5f88\u7b80\u5355\uff0c\u6839\u636e\u652f\u6301\u60c5\u51b5\uff0c<code>addEventListener<\/code>\u4e0e<code>attachEvent<\/code>\u65b9\u6cd5\u5206\u522b\u6dfb\u52a0\u4e8b\u4ef6\uff08<code>attachEvent<\/code>\u65b9\u6cd5\u540e\u6dfb\u52a0\u4e8b\u4ef6\u5148\u89e6\u53d1\uff09\u5373\u53ef\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>addEvent: function(type, fn, capture) {\n    var el = this.el;\n    if (window.addEventListener) {\n        el.addEventListener(type, fn, capture);        \n    } else if (window.attachEvent) {\n        el.attachEvent(\"on\" + type, fn);\n    }\n    return this;\n}\n<\/pre>\n<\/div>\n<p>\u663e\u7136\uff0c\u4e8b\u60c5\u4e0d\u4f1a\u8fd9\u4e48\u7b80\u5355\uff0c\u6709\u53e5\u53e4\u8bdd\u53eb\u505a\u201c\u4e0a\u5c71\u5bb9\u6613\u4e0b\u5c71\u96be\u201d\uff0c\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u6dfb\u52a0\u5bb9\u6613\uff0c\u4f46\u662f\u5982\u4f55\u89e6\u53d1\u5b83\u4eec\u5462\uff1f\u2014\u2014\u8003\u8651\u5230\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u4e0e\u6d4f\u89c8\u5668\u884c\u4e3a\u65e0\u5173\uff0c\u540c\u65f6\u6d4f\u89c8\u5668\u6ca1\u6709\u76f4\u63a5\u7684\u89e6\u53d1\u4e8b\u4ef6\u7684\u65b9\u6cd5\u3002<\/p>\n<p><strong>\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u7684\u89e6\u53d1<\/strong><br \/>\u53c8\u662f\u4e0d\u53ef\u907f\u514d\u7684\uff0c\u7531\u4e8e\u6d4f\u89c8\u5668\u517c\u5bb9\u6027\u95ee\u9898\uff0c\u6211\u4eec\u8981\u5206\u5f00\u8bf4\u4e86\uff0c\u9488\u5bf9\u6807\u51c6\u6d4f\u89c8\u5668\u548cIE6\/7\u7b49\u8003\u53e4\u6d4f\u89c8\u5668\u3002<\/p>\n<p><strong>1. \u5bf9\u4e8e\u6807\u51c6\u6d4f\u89c8\u5668<\/strong>\uff0c\u5176\u63d0\u4f9b\u4e86\u53ef\u4f9b\u5143\u7d20\u89e6\u53d1\u7684\u65b9\u6cd5\uff1a<code>element.dispatchEvent()<\/code>. \u4e0d\u8fc7\uff0c\u5728\u4f7f\u7528\u8be5\u65b9\u6cd5\u4e4b\u524d\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u505a\u5176\u4ed6\u4e24\u4ef6\u4e8b\uff0c\u53ca\u521b\u5efa\u548c\u521d\u59cb\u5316\u3002\u56e0\u6b64\uff0c\u603b\u7ed3\u8bf4\u6765\u5c31\u662f\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>document.createEvent()\nevent.initEvent()\nelement.dispatchEvent()<\/pre>\n<\/div>\n<p>\u4e3e\u4e2a\u677f\u6817\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>$(dom).addEvent(\"alert\", function() {\n    alert(\"\u5f39\u5f39\u5f39\uff0c\u5f39\u8d70\u9c7c\u5c3e\u7eb9~~\");\n});\n\n<span style=\"color:green;\">\/\/ \u521b\u5efa<\/span>\nvar evt = document.createEvent(\"HTMLEvents\");\n<span style=\"color:green;\">\/\/ \u521d\u59cb\u5316<\/span>\nevt.initEvent(\"alert\", false, false);\n\n<span style=\"color:green;\">\/\/ \u89e6\u53d1, \u5373\u5f39\u51fa\u6587\u5b57<\/span>\ndom.dispatchEvent(evt);\n<\/pre>\n<\/div>\n<p><code>createEvent()<\/code>\u65b9\u6cd5\u8fd4\u56de\u65b0\u521b\u5efa\u7684<code>Event<\/code>\u5bf9\u8c61\uff0c\u652f\u6301\u4e00\u4e2a\u53c2\u6570\uff0c\u8868\u793a\u4e8b\u4ef6\u7c7b\u578b\uff0c\u5177\u4f53\u89c1\u4e0b\u8868\uff1a<\/p>\n<table width=\"400\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\" class=\"params_table\">\n<tr>\n<th scope=\"col\">\u53c2\u6570<\/th>\n<th scope=\"col\">\u4e8b\u4ef6\u63a5\u53e3<\/th>\n<th scope=\"col\">\u521d\u59cb\u5316\u65b9\u6cd5<\/th>\n<\/tr>\n<tr>\n<td>HTMLEvents<\/td>\n<td>HTMLEvent<\/td>\n<td>initEvent()<\/td>\n<\/tr>\n<tr>\n<td>MouseEvents<\/td>\n<td>MouseEvent<\/td>\n<td>initMouseEvent()<\/td>\n<\/tr>\n<tr>\n<td>UIEvents<\/td>\n<td>UIEvent<\/td>\n<td>initUIEvent()<\/td>\n<\/tr>\n<\/table>\n<p>\u5173\u4e8e<code>createEvent()<\/code>\u65b9\u6cd5\u6211\u81ea\u5df1\u4e86\u89e3\u4e5f\u4e0d\u662f\u5f88\u6df1\u5165\uff0c\u4e0d\u60f3\u6ee5\u7afd\u5145\u6570\uff0c\u8bef\u4eba\u5b50\u5f1f\uff0c\u6240\u4ee5\u60a8\u6709\u7591\u95ee\u6211\u53ef\u80fd\u4f5c\u7b54\u4e0d\u4e86\uff0c\u5e0c\u671b\u5bf9\u719f\u77e5\u8be5\u65b9\u6cd5\u7684\u4eba\u53ef\u4ee5\u505a\u8fdb\u4e00\u6b65\u7684\u89e3\u91ca\u8bf4\u660e\uff08\u4f8b\u5982\u4e8b\u4ef6\u63a5\u53e3\u4e0e<code>document<\/code>\u5173\u7cfb\uff0c<code>UIEvent<\/code>\u662f\u4ec0\u4e48\u4e1c\u897f\u7b49\uff09\u3002<\/p>\n<p><code>initEvent()<\/code>\u65b9\u6cd5\u7528\u4e8e\u521d\u59cb\u5316\u901a\u8fc7<code>DocumentEvent<\/code>\u63a5\u53e3\u521b\u5efa\u7684<code>Event<\/code>\u7684\u503c\u3002\u652f\u6301\u4e09\u4e2a\u53c2\u6570\uff1a<code>initEvent(eventName, canBubble, preventDefault)<\/code>. \u5206\u522b\u8868\u793a\u4e8b\u4ef6\u540d\u79f0\uff0c\u662f\u5426\u53ef\u4ee5\u5192\u6ce1\uff0c\u662f\u5426\u963b\u6b62\u4e8b\u4ef6\u7684\u9ed8\u8ba4\u64cd\u4f5c\u3002<\/p>\n<p><code>dispatchEvent()<\/code>\u5c31\u662f\u89e6\u53d1\u6267\u884c\u4e86\uff0c<code>dom.dispatchEvent(eventObject)<\/code>, \u53c2\u6570<code>eventObject<\/code>\u8868\u793a\u4e8b\u4ef6\u5bf9\u8c61\uff0c\u662f<code>createEvent()<\/code>\u65b9\u6cd5\u8fd4\u56de\u7684\u521b\u5efa\u7684<code>Event<\/code>\u5bf9\u8c61\u3002<\/p>\n<p><strong>2. \u5bf9\u4e8eIE\u6d4f\u89c8\u5668<\/strong>\uff0c\u7531\u4e8e\u5411\u4e0b\u5f88\u591a\u7248\u672c\u7684\u6d4f\u89c8\u5668\u90fd\u4e0d\u652f\u6301<code>document.createEvent()<\/code>\u65b9\u6cd5\uff0c\u56e0\u6b64\u6211\u4eec\u9700\u8981\u53e6\u8f9f\u8e4a\u5f84\uff08\u636e\u8bf4IE\u6709<code>document.createEventObject()<\/code>\u548c<code>event.fireEvent()<\/code>\u65b9\u6cd5\uff0c\u4f46\u662f\u4e0d\u652f\u6301\u81ea\u5b9a\u4e49\u4e8b\u4ef6~~\uff09\u3002<\/p>\n<p>IE\u6d4f\u89c8\u5668\u6709\u4e0d\u5c11\u81ea\u7ed9\u81ea\u8db3\u7684\u4e1c\u897f\uff0c\u4f8b\u5982\u4e0b\u9762\u8981\u8bf4\u7684\u8fd9\u4e2a<code>\"propertychange\"<\/code>\u4e8b\u4ef6\uff0c\u987e\u540d\u601d\u610f\uff0c\u5c31\u662f\u5c5e\u6027\u6539\u53d8\u5373\u89e6\u53d1\u7684\u4e8b\u4ef6\u3002\u4f8b\u5982\u6587\u672c\u6846<code>value<\/code>\u503c\u6539\u53d8\uff0c\u6216\u662f\u5143\u7d20<code>id<\/code>\u6539\u53d8\uff0c\u6216\u662f\u7ed1\u5b9a\u7684\u4e8b\u4ef6\u6539\u53d8\u7b49\u7b49\u3002<\/p>\n<p>\u6211\u4eec\u53ef\u4ee5\u5229\u7528\u8fd9\u4e2aIE\u79c1\u6709\u7684\u4e1c\u897f\u5b9e\u73b0\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u7684\u89e6\u53d1\uff0c\u5927\u5bb6\u53ef\u4ee5\u5148\u82b1\u51e0\u5206\u949f\u60f3\u60f3\u2026\u2026<\/p>\n<p><span class=\"s\" style=\"color:#999;\">\/\/ zxx: \u5047\u8bbe\u51e0\u5206\u949f\u5df2\u7ecf\u8fc7\u53bb\u4e86\u2026\u2026<\/span><\/p>\n<p>\u5927\u5bb6\u73b0\u5728\u6709\u601d\u8def\u4e86\u6ca1\uff1f\u5176\u5b9e\u8bf4\u7a7f\u4e86\u5f88\u7b80\u5355\uff0c\u5f53\u6211\u4eec\u6dfb\u52a0\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u7684\u65f6\u5019\uff0c\u987a\u4fbf\u7ed9\u5143\u7d20\u6dfb\u52a0\u4e00\u4e2a\u81ea\u5b9a\u4e49\u5c5e\u6027\u5373\u53ef\u3002\u4f8b\u5982\uff0c\u6211\u4eec\u6dfb\u52a0\u81ea\u5b9a\u4e49\u540d\u4e3a<code>\"alert\"<\/code>\u7684\u81ea\u5b9a\u4e49\u4e8b\u4ef6\uff0c\u987a\u4fbf\u6211\u4eec\u53ef\u4ee5\u5bf9\u5143\u7d20\u505a\u70b9\u5c0f\u624b\u811a\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>dom.evtAlert = \"2012-04-01\";<\/pre>\n<\/div>\n<p>\u518d\u987a\u4fbf\u628a\u81ea\u5b9a\u4e49\u4e8b\u4ef6<code>fn<\/code>\u585e\u5230<code>\"propertychange\"<\/code>\u4e8b\u4ef6\u4e2d\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>dom.attachEvent(\"onpropertychange\", function(e) {\n    if (e.propertyName == \"evtAlert\") {\n        fn.call(this);\n    }\n});<\/pre>\n<\/div>\n<p>\u8fd9\u4e2a\uff0c\u5f53\u6211\u4eec\u9700\u8981\u89e6\u53d1\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u7684\u65f6\u5019\uff0c\u53ea\u8981\u4fee\u6539DOM\u4e0a\u81ea\u5b9a\u4e49\u7684<code>evtAlert<\/code>\u5c5e\u6027\u7684\u503c\u5373\u53ef\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>dom.evtAlert = Math.random();\t<span style=\"color:green;\">\/\/ \u503c\u53d8\u6210\u968f\u673a\u6570<\/span><\/pre>\n<\/div>\n<p>\u6b64\u65f6\u5c31\u4f1a\u89e6\u53d1<code>dom<\/code>\u4e0a\u7ed1\u5b9a\u7684<code>onpropertychange<\/code>\u4e8b\u4ef6\uff0c\u53c8\u56e0\u4e3a\u4fee\u6539\u7684\u5c5e\u6027\u540d\u6b63\u597d\u662f<code>\"evtAlert\"<\/code>, \u4e8e\u662f\u81ea\u5b9a\u4e49\u7684<code>fn<\/code>\u5c31\u4f1a\u88ab\u6267\u884c\u3002\u8fd9\u5c31\u662fIE\u6d4f\u89c8\u5668\u4e0b\u4e8b\u4ef6\u89e6\u53d1\u5b9e\u73b0\u7684\u5b8c\u6574\u673a\u5236\uff0c\u5e94\u8be5\u8bf4\u8bb2\u5f97\u8fd8\u662f\u86ee\u7ec6\u7684\u3002<\/p>\n<p><strong>\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u7684\u5220\u9664<\/strong><br \/>\u4e0e\u89e6\u53d1\u4e8b\u4ef6\u4e0d\u540c\uff0c\u4e8b\u4ef6\u5220\u9664\uff0c\u5404\u4e2a\u6d4f\u89c8\u5668\u90fd\u63d0\u4f9b\u4e86\u5bf9\u4e8e\u7684\u65f6\u95f4\u5220\u9664\u65b9\u6cd5\uff0c\u5982<code>removeEventListener<\/code>\u548c<code>detachEvent<\/code>\u3002\u4e0d\u8fc7\u5462\uff0c\u5bf9\u4e8eIE\u6d4f\u89c8\u5668\uff0c\u8fd8\u8981\u591a\u5220\u9664\u4e00\u4e2a\u4e8b\u4ef6\uff0c\u5c31\u662f\u4e3a\u4e86\u5b9e\u73b0\u89e6\u53d1\u529f\u80fd\u989d\u5916\u589e\u52a0\u7684<code>onpropertychange<\/code>\u4e8b\u4ef6\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>dom.detachEvent(\"onpropertychange\", evt);<\/pre>\n<\/div>\n<p><strong>\u5927\u7efc\u5408<\/strong><br \/>\u7ed3\u5408\u4e0a\u9762\u6240\u6709\u8bba\u8ff0\u4e0e\u5c55\u793a\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u7c7b\u4f3c\u4e0b\u9762\u7684\u5b8c\u6574\u4ee3\u7801\uff08\u4e3a\u9650\u5236\u7bc7\u5e45\uff0c\u6eda\u52a8\u5b9a\u9ad8\uff0c\u60f3\u67e5\u770b\u5b8c\u6574\u4ee3\u7801\u63a8\u8350\u53bb\u539fdemo\uff0c\u6216\u662f<a href=\"javascript:\" id=\"togglePreBtn3\">\u70b9\u51fb\u8fd9\u91cc\u5b8c\u6574\u663e\u793a<\/a><span style=\"color:#999;\">&#8212; js\u4ea4\u4e92\uff0cRSS\u4e2d\u65e0\u6548\u679c<\/span>\u3002\uff09\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre id=\"longPreCode3\" style=\"height:200px; padding:5px; overflow:auto; resize:both; background-color:#fff;\">var $ = function(el) {\n    return new _$(el);    \n};\nvar _$ = function(el) {\n    this.el = (el && el.nodeType == 1)? el: document;\n};\n_$.prototype = {\n    constructor: this,\n    <span style=\"color:#cd0000;\">addEvent<\/span>: function(type, fn, capture) {\n        var el = this.el;\n        if (window.addEventListener) {\n            el.addEventListener(type, fn, capture);\n            var ev = document.createEvent(\"HTMLEvents\");\n            ev.initEvent(type, capture || false, false);\n            \n            if (!el[\"ev\" + type]) {\n                el[\"ev\" + type] = ev;\n            }  \n        } else if (window.attachEvent) {\n            el.attachEvent(\"on\" + type, fn);    \n            if (isNaN(el[\"cu\" + type])) {\n                <span style=\"color:green;\">\/\/ \u81ea\u5b9a\u4e49\u5c5e\u6027<\/span>\n                el[\"cu\" + type] = 0; \n            }   \n            var fnEv = function(event) {\n                if (event.propertyName == \"cu\" + type) { fn.call(el); }\n            };\n            el.attachEvent(\"onpropertychange\", fnEv);     \n            if (!el[\"ev\" + type]) {\n                el[\"ev\" + type] = [fnEv];\n            } else {\n                el[\"ev\" + type].push(fnEv);    \n            }\n        }\n        return this;\n    },\n    <span style=\"color:#cd0000;\">fireEvent<\/span>: function(type) {\n        var el = this.el;\n        if (typeof type === \"string\") {\n            if (document.dispatchEvent) {\n                if (el[\"ev\" + type]) {\n                    el.dispatchEvent(el[\"ev\" + type]);\n                }\n            } else if (document.attachEvent) {\n                el[\"cu\" + type]++;\n            }    \n        }    \n        return this;\n    },\n    <span style=\"color:#cd0000;\">removeEvent<\/span>: function(type, fn, capture) {\n        var el = this.el;\n        if (window.removeEventListener) {\n            el.removeEventListener(type, fn, capture || false);\n        } else if (document.attachEvent) {\n            el.detachEvent(\"on\" + type, fn);\n            var arrEv = el[\"ev\" + type];\n            if (arrEv instanceof Array) {\n                for (var i=0; i&lt;arrEv.length; i+=1) {\n                    el.detachEvent(\"onpropertychange\", arrEv[i]);\n                }\n            }\n        }\n        return this;    \n    }\n};<\/pre>\n<\/div>\n<p>\u60a8\u53ef\u4ee5\u72e0\u72e0\u5730\u70b9\u51fb\u8fd9\u91cc\uff1a<a class=\"a_link\" target=\"_blank\" href=\"http:\/\/www.zhangxinxu.com\/study\/201203\/js-custom-dom-events.html\">JS DOM\u81ea\u5b9a\u4e49\u4e8b\u4ef6demo<\/a><\/p>\n<p>demo\u9875\u9762\u4e2d\u7684\u7684\u5f20\u542b\u97f5\u5c0f\u59d0\u56fe\u7247\u4e0a\u901a\u8fc7\u7ea7\u8054\u5f62\u5f0f\u8054\u7cfb\u6dfb\u52a0\u4e86\u4e09\u4e2a\u4e8b\u4ef6\uff08\u4e00\u4e2a\u662f\u5305\u542b\u6d4f\u89c8\u5668\u884c\u4e3a\u7684<code>click<\/code>\u4e8b\u4ef6\uff0c\u8fd8\u6709\u4e24\u4e2a\u662f\u81ea\u5b9a\u4e49\u4e0d\u542b\u884c\u4e3a\u7684<code>alert<\/code>\u4e8b\u4ef6\uff09\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>$(elImage)\n    .<span style=\"color:#cd0000;\">addEvent<\/span>(\"click\", funClick);\n    .<span style=\"color:#cd0000;\">addEvent<\/span>(\"alert\", funAlert1)\n    .<span style=\"color:#cd0000;\">addEvent<\/span>(\"alert\", funAlert2);<\/pre>\n<\/div>\n<p>\u800c<code>funClick<\/code>\u65b9\u6cd5\u4e2d\u6709\u7b49\u540c\u4e0b\u9762\u811a\u672c\uff1a<\/p>\n<div class=\"zxx_code\">\n<pre>$(e.target).fireEvent(\"alert\");<\/pre>\n<\/div>\n<p style=\"font-family:simsun;\">\u56e0\u6b64\uff0c\u70b9\u51fb\u56fe\u7247\uff0c\u624d\u4f1a\u51fa\u73b0\u4e09\u4e2a\u5f39\u51fa\u6846\uff1a\u7528\u6237\u70b9\u51fb\u56fe\u7247 \u2192 \u6267\u884c<code>funClick<\/code> \u2192 \u7b2c\u4e00\u4e2a\u5f39\u6846 \u2192 \u6267\u884c<code>fireEvent<\/code> \u2192 \u89e6\u53d1\u81ea\u5b9a\u4e49<code>\"alert\"<\/code>\u4e8b\u4ef6 \u2192 \u8fde\u7eed\u4e24\u4e2a<code>\"alert\"<\/code>\u4e8b\u4ef6\u5f39\u6846<\/p>\n<p>\u5f53\u70b9\u51fb\u56fe\u7247\u4e0b\u9762\u7684\u6309\u94ae\u6e05\u9664\u6389\u81ea\u5b9a\u4e49<code>\"alert\"<\/code>\u4e8b\u4ef6\u540e\uff0c\u518d\u70b9\u51fb\u56fe\u7247\u5c31\u53ea\u6709\u4e00\u4e2a\u5f39\u51fa\u54af\uff08<code>funAlert1<\/code>\u548c<code>funAlert2<\/code>\u63d0\u524d\u56de\u5bb6\u626b\u5893\u53bb\u4e86\uff09\uff01<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/image.zhangxinxu.com\/image\/blog\/201204\/2012-04-01_164657.png\" width=\"262\" height=\"130\" \/> <img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/image.zhangxinxu.com\/image\/blog\/201204\/2012-04-01_164737.png\" width=\"378\" height=\"206\" \/><\/p>\n<p><script>var funPreHeightToggle = function(btn, pre) {btn.onclick = function() {\tif (\/200\/.test(pre.style.height)) {\t\tpre.style.height=\"auto\";\t\tthis.innerHTML = this.innerHTML.replace(\"\u5b8c\u6574\u663e\u793a\", \"\u6536\u8d77\");\t} else {\t\tpre.style.height=\"200px\";\t\tthis.innerHTML = this.innerHTML.replace(\"\u6536\u8d77\", \"\u5b8c\u6574\u663e\u793a\");\t}\treturn false;};\n};funPreHeightToggle(document.getElementById(\"togglePreBtn\"), document.getElementById(\"longPreCode\"));funPreHeightToggle(document.getElementById(\"togglePreBtn2\"), document.getElementById(\"longPreCode2\"));funPreHeightToggle(document.getElementById(\"togglePreBtn3\"), document.getElementById(\"longPreCode3\"));<\/script><\/p>\n<h3>\u4e94\u3001\u6e05\u660e\u8282\u524d\u7684\u7ed3\u8bed<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/image.zhangxinxu.com\/image\/emtion\/laugh.png\" alt=\"\u946b\u8868\u60c5\" width=\"150\" height=\"150\" style=\"float:left;\" \/><\/p>\n<p>\u660e\u5929\u56de\u5bb6\uff0c\u5f88\u663e\u7136\uff0c\u6211\u8981\u9493\u9c7c\u9493\u6b7b\u5728\u6cb3\u8fb9\u4e0a\u3002<\/p>\n<p>\u65f6\u95f4\u7b49\u5ba2\u89c2\u539f\u56e0\uff0c\u672c\u6587\u5c55\u793a\u7684\u4e9b\u811a\u672c\u5e76\u672a\u505a\u975e\u5e38\u8be6\u5c3d\u4e25\u8c28\u7684\u6d4b\u8bd5\uff0c\u56e0\u6b64\uff0c\u4e0d\u5efa\u8bae\u76f4\u63a5Copy\u5230\u5b9e\u9645\u9879\u76ee\u4e2d\u5e94\u7528\uff0c\u66f4\u591a\u65e8\u5728\u76f8\u4e92\u4ea4\u6d41\u4e0e\u5b66\u4e60\u3002\u4f8b\u5982\u5728IE\u6d4f\u89c8\u5668\u4e0b\uff0c\u6700\u540e\u7684\u201c\u4f2aDOM\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u201d\uff0cclick\u4e8b\u4ef6\u901a\u8fc7\u70b9\u51fb\u89e6\u53d1\u65f6\u7684\u4e8b\u4ef6\u7c7b\u578b(<code>event.type<\/code>)\u662f<code>click<\/code>, \u4f46\u662f\u901a\u8fc7<code>fireEvent<\/code>\u89e6\u53d1\u7684\u65f6\u5019\u4e8b\u4ef6\u7c7b\u578b\u662f<code>propertychange<\/code>, \u8fd9\u4e9b\u7ec6\u8282\u5728\u6d4b\u8bd5\u5b66\u4e60\u7684\u65f6\u5019\u90fd\u662f\u53ef\u4ee5\u5ffd\u7565\u7684\uff0c\u4f46\u662f\u8981\u662f\u5b9e\u9645\u5e94\u7528\uff0c\u8fd9\u90fd\u662f\u9700\u8981\u5b8c\u5584\u7684\u3002<\/p>\n<p>\u672c\u60f3\u4ee5\u5f88\u901a\u4fd7\u6613\u61c2\u7684\u8bed\u8a00\u9610\u8ff0\u6211\u60f3\u8868\u8fbe\u7684\u5185\u5bb9\uff0c\u4f46\u662f\uff0c\u73b0\u5728\u56de\u8fc7\u5934\u770b\u770b\uff0c\u505a\u5f97\u5e76\u4e0d\u597d\uff0c\u672f\u8bed\uff0c\u5570\u55e6\u7684\u8bdd\u8bed\u8fd8\u662f\u663e\u5f97\u591a\u4e86\u70b9\uff0c\u8fd9\u65b9\u9762\u7684\u529f\u529b\u8fd8\u9700\u8981\u52a0\u5f3a\uff0c\u6216\u8bb8\u662f\u672c\u8eab\u7406\u89e3\u4e0d\u900f\u5f7b\u7684\u7f18\u6545\uff0c\u65e0\u6cd5\u9a7e\u9a6d\u81ea\u7136\u65e0\u6cd5\u8bed\u8a00\u901a\u4fd7\u5316\u3002<\/p>\n<p>\u867d\u8bf4\u81ea\u5df1JS\u65b9\u9762\u7684\u5b66\u4e60\u6bd4\u4e24\u5e74\u524d\u8981\u597d\u591a\u4e86\uff08\u90a3\u4e2a\u65f6\u5019\u8fde<code>addEventListener<\/code>\u548c<code>attachEvent<\/code>\u653e\u5728\u4e00\u8d77\u5e72\u561b\u7684\u90fd\u4e0d\u6e05\u695a\uff09\uff0c\u4f46\u662f\u5fc3\u91cc\u6e05\u695a\u7684\u5f88\uff0cJS\u8fd8\u662f\u5f88\u8584\u5f31\u7684\uff0c\u8ddf\u771f\u6b63\u4f18\u79c0\u7684JS\u5f00\u53d1\u4eba\u5458\u76f8\u6bd4\uff0c\u8981\u79ef\u7d2f\u7684\u8fd8\u6709\u5f88\u591a\u3002\u4ec0\u4e48\u65f6\u5019\u80fd\u591f\u50cf\u770b\u6709\u8272\u5c0f\u8bf4\u4e00\u6837\u628a\u300aJavaScript\u8bed\u8a00\u7cbe\u7cb9\u300b\u4e00\u4e66\u8bfb\u4e0b\u6765\uff0c\u6069\uff0c\u4f30\u8ba1\u53ef\u4ee5\u6709\u8138\u5f97\u745f\u5f97\u745f\u4e86~~<\/p>\n<p>\u672c\u6587\u6d89\u53ca\u7684\u4e00\u4e9b\u77e5\u8bc6\u70b9\u6b22\u8fce\u8865\u5145\u63d0\u70b9\uff0c\u6709\u8868\u8ff0\u4e0d\u51c6\u786e\u7684\u5730\u65b9\u6b22\u8fce\u6307\u6b63\u3002<\/p>\n<p>\u6700\u540e\uff0c\u795d\u5927\u5bb6\u6e05\u660e\u8282\u5feb\u4e50\uff01\u989d\uff1f\u600e\u4e48\u8fd9\u53e5\u8bdd\u602a\u602a\u7684\u2014\u2014\u4e0a\u575f\u4e00\u822c\u5feb\u4e50\u4e0d\u8d77\u6765\u5427~~\u90a3\u5927\u5bb6\u795d\u6211\u6e05\u660e\u56de\u5bb6\u9493\u9c7c\u5927\u4e30\u6536\uff0c\u5927\u7206\u7bb1\uff01\uff01\u54c8\u54c8\uff01\uff01<\/p>\n<p>\u672c\u6587\u4e3a\u539f\u521b\u6587\u7ae0\uff0c\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u6765\u81ea<a href=\"http:\/\/www.zhangxinxu.com\/\">\u5f20\u946b\u65ed-\u946b\u7a7a\u95f4-\u946b\u751f\u6d3b<\/a>[<a href=\"http:\/\/www.zhangxinxu.com\/\">http:\/\/www.zhangxinxu.com<\/a>]<br \/>\n\u672c\u6587\u5730\u5740\uff1a<a href=\"http:\/\/www.zhangxinxu.com\/wordpress\/?p=2330\">http:\/\/www.zhangxinxu.com\/wordpress\/?p=2330<\/a><\/p>\n<p>\uff08\u672c\u7bc7\u5b8c\uff09<\/p>\n","protected":false},"excerpt":{"rendered":"<p><a href=\"http:\/\/www.zhangxinxu.com\/wordpress\/?p=2330\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/image.zhangxinxu.com\/image\/blog\/201204\/js-custom-events.jpg\" alt=\"js\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u3001DOM\u81ea\u5b9a\u4e49\u4e8b\u4ef6\" title=\"\u70b9\u51fb\u67e5\u770b\u672c\u6587\" width=\"550\" height=\"170\" class=\"imgpad mb10\" \/><\/a><br \/>\n\u6700\u8fd1\u6587\u7ae0\u4ea7\u91cf\u867d\u591a\uff0c\u4f46\u5927\u591a\u90fd\u662f\u77ed\u7bc7\u3002\u672c\u6587\u65ad\u65ad\u7eed\u7eed\u6298\u817e\u4e86\u5dee\u4e0d\u591a\u6709\u4e00\u5468\uff0c\u73b0\u5728\u7ec8\u4e8e\u51fa\u7089\u4e86\u3002\u4e3b\u8981\u662f\u4ecb\u7ecd\u4e86JS\u7684\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u4ee5\u53ca\u5982\u4f55\u5728DOM\u5143\u7d20\u4e0a\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u3002\u5faa\u5e8f\u6e10\u8fdb\uff0c\u5a13\u5a13\u9053\u6765\uff0c\u7eaf\u7cb9JS\u77e5\u8bc6\u4e0e\u7406\u8bba\u3002\u8be6\u5c3d\u7684\u4ee3\u7801\u5c55\u793a\uff0c\u5236\u4f5c\u7cbe\u826f\u7684demo\u6d4b\u8bd5\u9875\u9762\uff0c\u5fc5\u8981\u7684\u622a\u56fe\u793a\u610f\uff0c\u76f8\u4fe1\u672c\u6587\u7684\u5185\u5bb9\u4f1a\u5bf9\u60a8\u7684\u5b66\u4e60\u6709\u6240\u5e2e\u52a9\u7684\uff08\u5982\u679c\u4f60\u5bf9JS\u6709\u5174\u8da3\u7684\u8bdd\uff09\uff0c\u4e0d\u4fe1\uff1f\u8bfb\u4e00\u8bfb\u5c31\u77e5\u9053\u4e86\u3002<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[180],"tags":[705,706,707,708,182,13,704,140,508,407,449,703],"_links":{"self":[{"href":"https:\/\/www.zhangxinxu.com\/wordpress\/wp-json\/wp\/v2\/posts\/2330"}],"collection":[{"href":"https:\/\/www.zhangxinxu.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.zhangxinxu.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhangxinxu.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.zhangxinxu.com\/wordpress\/wp-json\/wp\/v2\/comments?post=2330"}],"version-history":[{"count":0,"href":"https:\/\/www.zhangxinxu.com\/wordpress\/wp-json\/wp\/v2\/posts\/2330\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.zhangxinxu.com\/wordpress\/wp-json\/wp\/v2\/media?parent=2330"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.zhangxinxu.com\/wordpress\/wp-json\/wp\/v2\/categories?post=2330"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhangxinxu.com\/wordpress\/wp-json\/wp\/v2\/tags?post=2330"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}