2014-02-20 30 views
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

+0

我懷疑$(本)是問題! –

+0

'while(this.length - )'不起作用(將數組寫入並拋出錯誤) – Bergi

回答

0

這個問題在以下的點解決方案:

this[this.length].attachEvent('on' + event, function(){ callback.call(window.event.srcElement); }); 
相關問題