Ошибка 0x800a01b6 — Объект не поддерживает свойство или метод ‘attachEvent’

#javascript

#javascript

Вопрос:

Я новичок в этой области, и я не знаю, почему это неправильно:

 if (this.trigger.addEventListener) {
            this.trigger.addEventListener(this.eventtype, function (ev) {
                ev.stopPropagation();
                ev.preventDefault();
                if (self.isMenuOpen) {
                    self._closeMenu();
                    document.removeEventListener(self.eventtype, self.bodyClickFn);
                }
                else {
                    self._openMenu();
                    document.addEventListener(self.eventtype, self.bodyClickFn);
                }
            });
        } else {
            this.trigger.attachEvent('on'   this.eventtype, function (ev) {
                ev.stopPropagation();
                ev.preventDefault();
                if (self.isMenuOpen) {
                    self._closeMenu();
                    document.detachEvent('on'   self.eventtype, self.bodyClickFn);
                }
                else {
                    self._openMenu();
                    document.attachEvent('on'   self.eventtype, self.bodyClickFn);
                }
            });
 

addeventlistener отлично работает в ie edge, Chrome, FF, но мне нужно, чтобы это работало в ie7, и я не нахожу похожего примера у моего друга Google.

Комментарии:

1. Что такое this.trigger ?

2. это объект, который открывает меню

3. «объект» недостаточно конкретен. Все является «объектом» (кроме примитивов)

4. извините. это кнопка.

5. И вы уверены в этом? Если вы alert(this.trigger.nodeName) это сделаете, вы получите BUTTON ?

Ответ №1:

проблема заключалась в доступе к элементу:

 if (msieversion() <= 7) {
            this.trigger = document.getElementById('t123');
            this.menu = document.getElementById('t456');

        } else {
            this.trigger = this.el.querySelector('a.gn-icon-menu');
            this.menu = this.el.querySelector('nav.gn-menu-wrapper');
        }
 

а методы ev.stopPropagation(); и ev.preventDefault(); не поддерживаются ie7. правильный путь:

 (ev.stopPropagation) ? ev.stopPropagation() : ev.cancelBubble=true ;
(ev.preventDefault) ? ev.preventDefault() : ev.returnValue = false;
 

спасибо всем.