0
我正在嘗試爲我的私人用途創建一個小型JavaScript庫。
目前,我試圖創建event
方法來將事件添加到一個元素或多個元素。
該問題具體涉及IE 6, 7, 8
。
大家都知道我們是否對很多元素做了一個事件,然後當我們在回調函數中寫入'this'時,就是指你點擊它的元素,例如使用jQuery。如何在舊版瀏覽器中使用事件處理程序返回'this'對象
$(".box").on('click', function(){
$(this).html(); // get content of the element that clicked on it.
})
在我的圖書館this
對象工作正常,在現代瀏覽器ff, ch, op, saf, IE9+
,但IE 6,7,8
不起作用。
以下是負責我的圖書館創建活動的一部分:
event: function (event, callback, sync) {
// if the user uses modern browser.
// 'this.length' to know how many elements (selector).
if (document.addEventListener) {
// if the selector more than one element
if (this.length > 1) {
while (this.length--) {
this[this.length].addEventListener(event, callback, sync);
}
} else {
this[0].addEventListener(event, callback, sync);
}
} else if (window.attachEvent) {
if (this.length > 1) {
while (this.length--) {
this[this.length].attachEvent('on' + event, callback);
}
} else {
this[0].attachEvent('on' + event, callback);
}
} else {
console.log(false);
return false;
}
return this;
下面是使用我的圖書館到以下幾個因素將事件的示例使用名爲box
類。
HTML:
<div id="box">
<p class="box">span</p>
<p class="box">span 2</p>
<p class="box">span 3</p>
</div>
的Javascript:
oo('.box').event('click', function() {
alert(this.innerHTML);
});
下一個代碼只適用於舊的瀏覽器
oo('.box').event('click', function() {
alert(window.event.srcElement.innerHTML);
});
this.innerHTML
意思是點擊某個元素將獲得其內容。
前面的例子工作在現代瀏覽器很好,但在IE 6, 7, 8
不工作,並給我undefined
我懷疑$(本)是問題! –
'while(this.length - )'不起作用(將數組寫入並拋出錯誤) – Bergi