正如@Ian說,這種類型的鏈接是不能作爲標準,而無需編寫的包裝。但在支持addEventListener
(IE9 +)的瀏覽器上,您可以添加這樣的包裝。
HTML
<p>Something</p>
的Javascript
Node.prototype.addEventListener = (function (addEventListener) {
return function() {
addEventListener.apply(this, arguments);
return this;
};
}(Node.prototype.addEventListener));
document.getElementsByTagName('p')[0].addEventListener('click', function (ev) {
ev.target.style.color = "lime";
}, false).addEventListener('mouseover', function (ev) {
ev.target.style.color = "red";
}, false).addEventListener('dblclick', function (ev) {
ev.target.style.color = 'navy';
}, false);
在jsFiddle
也可以編寫一個函數與on + eventName
工作(當然jQuery和其他已經這樣做了)的不支持它的瀏覽器。
@Ian說
爲什麼反正做這個事情?
一個很好的問題。
這裏是不支持addEventListener
瀏覽器的一個可能的解決方案(不考慮舊的瀏覽器已知的bug)
的Javascript
Node.prototype.assignEvent = (function() {
return function (type, listener) {
var previousListener = this['on' + type];
if (typeof previousListener === 'function') {
this['on' + type] = function(evt) {
listener(evt);
previousListener(evt)
};
} else {
this['on' + type] = listener;
}
return this;
};
}());
document.getElementsByTagName('p')[0].assignEvent('click', function (ev) {
ev.target.style.color = "lime";
}).assignEvent('mouseover', function (ev) {
ev.target.style.color = "red";
}).assignEvent('dblclick', function (ev) {
ev.target.style.color = 'navy';
});
在jsFiddle
最後你可以將上述兩個示例合併到一個示例中,以這種方式利用現代瀏覽器上的addEventListener
,而對於較舊的示例則回退到on + eventName
。
除非您創建自己的包裝函數,否則您將無法工作。爲什麼這件事無論如何? – Ian
@MAJDOU Aimad如果您打算接受jQuery答案,請確保將jQuery標籤添加到您的問題中。 – Xotic750