2014-02-20 2 views
0

Я пытаюсь создать небольшую библиотеку javascript для своего личного использования.
В настоящее время я пытаюсь создать метод event для добавления события к одному элементу или ко многим элементам.
Проблема, относящаяся к IE 6, 7, 8.
Все знают, если мы делаем событие для многих элементов, тогда, когда мы пишем 'this' внутри функции обратного вызова, означает элемент, который вы нажимаете на него, например, используя jquery.Как вернуть этот объект с обработчиком событий в старых браузерах

$(".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 -)' не работает (будет emtpy ваш массив и выбросить ошибку) – Bergi

ответ

0

Решение этой задачи в следующем пункте:

this[this.length].attachEvent('on' + event, function(){ callback.call(window.event.srcElement); }); 
Смежные вопросы