2017-01-15 2 views
0

Это часть моего кода (где к моим изображениям добавлены прослушиватели событий).Слушатели событий не работают в IE и FF

var overlay = this.overlay; 
    var icon_holder = this.icon_hld; 
    var docfrag = document.createDocumentFragment(); 
    var images = holder.querySelectorAll('img'); 
    var that = this; 
    function video_play() { 
     console.log(this); 
     this.style.display = 'none'; 
     this.parentNode.querySelector('.JGalleryMedia').style.display = ''; 
     this.parentNode.querySelector('.JGalleryMedia').play(); 
     this.parentNode.querySelector('.JGalleryMedia').autoplay = true; 
    } 
    [].forEach.call(images, function (img) { 
     img.addEventListener('click', JGallery.prototype.showMe.bind(that), false); 
    } 
} 

Это прекрасно работает в опера и хром, но не работает в IE и FF. Я видел caniuse.com, но я не нашел ничего, что я не должен использовать в своем коде. Если вы хотите увидеть рабочую демонстрацию, запустите zaervax.ir с помощью chrome или opera и перейдите в галерею и нажмите на миниатюры изображений.

ответ

0

ok Проблема IE была около для Each (без .call) (у меня это было в нескольких строках выше указанных строк). и FF (v47), похоже, имеет проблемы с forEach. Я обновил свой FF (до v50) (проблема решена без изменения кода). И я решил больше не использовать forEach, а вместо этого использовал. как так ...

var i = 0; 
while(i < images.length){ 
    var img = images.item(i); 
    img.addEventListener('click', JGallery.prototype.showMe.bind(that), false); 
} 

и теперь он хорошо работает, вы можете проверить его в zaervax.ir

1

Я не уверен, но я думаю, что вы не можете передавать такие параметры в eventListener.

Вы можете попробовать анонимную функцию как это:

img.addEventListener('click', function(){ 
    JGallery.prototype.showMe.bind(that) 
}, false); 

Кроме того, если вы хотите передать этот как параметры, которые вы можете использовать функции ES6 стрелки, так что вы сможете получить доступ к это в вашей функции showMe(). Это делается так:

img.addEventListener('click', event => this.JGallery.prototype.showMe(event), false); 

More infos about arrow functions

Если это не работает, вы можете попытаться открыть консоль и сообщить нам, если есть какое-либо сообщение об ошибке?

Смежные вопросы