объект не поддерживает свойство или метод "addEventListner" в т.е 8

0

Это мой код

    document.addEventListener('scroll', function (e) {

     var outer1 = document.getElementById('outer1');
     var outer2 = document.getElementById('outer2');
      -------
      --------
    }

Я использую jQuery версию jQuery v1.11.0. Но я получил эту ошибку. В настоящее время существует много аналогичных способов использования, и эта проблема видна только на IE8

  • 2
    почему вы используете чистый JavaScript, когда JQuery включен?
  • 3
    Попробуйте это: $(document).on('scroll', function(){ var outer1 = $("#outer1"); var outer2 = $("#outer2"); });
Теги:
internet-explorer

3 ответа

3
Лучший ответ

Совместимость

Вы можете обойти addEventListener, removeEventListener, Event.preventDefault и Event.stopPropagation, которые не поддерживаются IE 8, используя следующий код в начале вашего скрипта. Код поддерживает использование handleEvent, а также событие DOMContentLoaded.

Примечание: useCapture не поддерживается, поскольку IE 8 не имеет альтернативного метода. Также обратите внимание, что в следующем коде добавлена поддержка IE 8.

(function() {
  if (!Event.prototype.preventDefault) {
    Event.prototype.preventDefault=function() {
      this.returnValue=false;
    };
  }
  if (!Event.prototype.stopPropagation) {
    Event.prototype.stopPropagation=function() {
      this.cancelBubble=true;
    };
  }
  if (!Element.prototype.addEventListener) {
    var eventListeners=[];

    var addEventListener=function(type,listener /*, useCapture (will be ignored) */) {
      var self=this;
      var wrapper=function(e) {
        e.target=e.srcElement;
        e.currentTarget=self;
        if (listener.handleEvent) {
          listener.handleEvent(e);
        } else {
          listener.call(self,e);
        }
      };
      if (type=="DOMContentLoaded") {
        var wrapper2=function(e) {
          if (document.readyState=="complete") {
            wrapper(e);
          }
        };
        document.attachEvent("onreadystatechange",wrapper2);
        eventListeners.push({object:this,type:type,listener:listener,wrapper:wrapper2});

        if (document.readyState=="complete") {
          var e=new Event();
          e.srcElement=window;
          wrapper2(e);
        }
      } else {
        this.attachEvent("on"+type,wrapper);
        eventListeners.push({object:this,type:type,listener:listener,wrapper:wrapper});
      }
    };
    var removeEventListener=function(type,listener /*, useCapture (will be ignored) */) {
      var counter=0;
      while (counter<eventListeners.length) {
        var eventListener=eventListeners[counter];
        if (eventListener.object==this && eventListener.type==type && eventListener.listener==listener) {
          if (type=="DOMContentLoaded") {
            this.detachEvent("onreadystatechange",eventListener.wrapper);
          } else {
            this.detachEvent("on"+type,eventListener.wrapper);
          }
          break;
        }
        ++counter;
      }
    };
    Element.prototype.addEventListener=addEventListener;
    Element.prototype.removeEventListener=removeEventListener;
    if (HTMLDocument) {
      HTMLDocument.prototype.addEventListener=addEventListener;
      HTMLDocument.prototype.removeEventListener=removeEventListener;
    }
    if (Window) {
      Window.prototype.addEventListener=addEventListener;
      Window.prototype.removeEventListener=removeEventListener;
    }
  }
})();
  • 1
    Благодарю. Это работа для меня.
  • 0
    Рад помочь вам Deepu
0

В любом случае, кому нужна поддержка IE7, попробуйте ниже, это сработало для меня, спасибо всем за сценарии выше.

function preloadImages(array, waitForOtherResources, timeout) {
            var loaded = false, list = preloadImages.list, imgs = array.slice(0), t = timeout || 15 * 1000, timer;
            if (!preloadImages.list) {
                preloadImages.list = [];
            }
            if (!waitForOtherResources || document.readyState === 'complete') {
                loadNow();
            } else {

                addEvent('load', window, function () {
                    clearTimeout(timer);
                    loadNow();
                });

                // in case window.addEventListener doesn't get called (sometimes some resource gets stuck)
                // then preload the images anyway after some timeout time
                timer = setTimeout(loadNow, t);
            }
            function addEvent(evnt, elem, func) {
                if (elem.addEventListener)  // W3C DOM
                    elem.addEventListener(evnt, func, false);
                else if (elem.attachEvent) { // IE DOM
                    elem.attachEvent("on" + evnt, func);
                }
                else { // No much to do
                    elem[evnt] = func;
                }
            }
            function loadNow() {
                if (!loaded) {
                    loaded = true;
                    for (var i = 0; i < imgs.length; i++) {
                        var img = new Image();
                        img.onload = img.onerror = img.onabort = function () {
                            var index = preloadImages.list.indexOf(this);
                            if (index !== -1) {
                                // remove image from the array once it loaded
                                // for memory consumption reasons
                                preloadImages.list.splice(index, 1);
                            }
                        }
                        preloadImages.list.push(img);
                        img.src = imgs[i];
                    }
                }
            }
        }
if (!Array.prototype.indexOf) {
            Array.prototype.indexOf = function (searchElement, fromIndex) {

                var k;
                if (this == null) {
                    throw new TypeError('"this" is null or not defined');
                }

                var O = Object(this);
                var len = O.length >>> 0;

                if (len === 0) {
                    return -1;
                }
                var n = +fromIndex || 0;

                if (Math.abs(n) === Infinity) {
                    n = 0;
                }
                if (n >= len) {
                    return -1;
                }
                k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);

                while (k < len) {
                    if (k in O && O[k] === searchElement) {
                        return k;
                    }
                    k++;
                }
                return -1;
            };
        }
0

Internet Explorer (до версии 8) использовал альтернативный метод attachEvent.

вы можете попробовать это для кросс-браузерной функции addEvent.

function addEvent(evnt, elem, func) {
   if (elem.addEventListener)  // W3C DOM
      elem.addEventListener(evnt,func,false);
   else if (elem.attachEvent) { // IE DOM
      elem.attachEvent("on"+evnt, func);
   }
   else { // No much to do
      elem[evnt] = func;
   }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню