Ошибка объект не поддерживает свойство или метод attachevent

attachEvent is a deprecated function used in older versions of Internet Explorer.
For modern browsers use this instead.

el.addEventListener(evt,func,false);

See documentation here

You could also create a function which checks which function to use

function addListener(el, event, func){
    if (el.addEventListener) {
       el.addEventListener(event, func, false);
    }
    else {
       el.attachEvent("on"+event, func);
    }
}

Then you can attach your event by doing this:

var element = document.getElementById('myElement');
addListener(element, 'click', function(){
    alert('You have clicked!');
});

If you are unable to to this then perhaps a polyfill will work instead. Try to insert this somewhere:

if(!document.attachEvent){
  Object.prototype.attachEvent=function(event,func){
    this.addEventListener(event.split('on')[1], func);
  }
}

Hope this helps

attachEvent — это устаревшая функция, используемая в более старых версиях Internet Explorer.
Для современных браузеров используйте это вместо этого.

el.addEventListener(evt,func,false);

См. документацию здесь

Вы также можете создать функцию, которая проверяет, какую функцию использовать

function addListener(el, event, func){
    if (el.addEventListener) {
       el.addEventListener(event, func, false);
    }
    else {
       el.attachEvent("on"+event, func);
    }
}

Затем вы можете прикрепить свое событие, выполнив следующее:

var element = document.getElementById('myElement');
addListener(element, 'click', function(){
    alert('You have clicked!');
});

Если вы не можете этого сделать, возможно, вместо этого будет работать polyfill. Попробуйте вставить это где-нибудь:

if(!document.attachEvent){
  Object.prototype.attachEvent=function(event,func){
    this.addEventListener(event.split('on')[1], func);
  }
}

Надеюсь, что это поможет

Проблема в том, что вы также стерли настройки своего сайта для режима совместимости.

Чтобы предотвратить проблемы совместимости с добавлением события, вы должны использовать какой-то базовый анализ браузера (на основе функций), а затем применить соответствующую функцию события присоединения (для обратной совместимости со старыми версиями Internet Explorer):

// Modern browsers
if (typeof window.addEventListener === 'function') {
    window.addEventListener('load', CloseCtrlLanceurApplication, false);
}

// Internet Explorer
else {
    window.attachEvent('onload', CloseCtrlLanceurApplication);
}

В более старых версиях IE attachEvent используется для присоединения обработчика событий для некоторого события к некоторому элементу. Но согласно обновлению здесь , начиная с IE11, attachEvent устарел, и вместо него следует использовать addEventListener.

IE поддерживает addEventListener только в IE9 и выше. Поэтому, если вам все еще нужна поддержка IE8, я предлагаю вам использовать некоторую кроссбраузерную библиотеку, такую ​​как jQuery, для привязки обработчиков событий вместо ванильного javascript.

Поскольку вы уже используете jQuery, вы можете привязать события, как показано ниже

$('#yourElement').on('click', function(){
   // do something when you click on yourElement
}); 

person
Arkantos
  
schedule
19.03.2015

comment

с использованием события щелчка jQuery я решил свою проблему. вы сэкономите мне много времени. Благодарность
person Naitik; 19.03.2015

comment

Рад помочь :)
person Arkantos; 19.03.2015

#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;
 

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

Понравилась статья? Поделить с друзьями:
  • Ошибка объект не найден outlook
  • Ошибка объект или свойство не найдено 0x80092004
  • Ошибка общим доступом подключения к интернету null
  • Ошибка общий ресурс в настоящее время не создан
  • Ошибка общие dll что это