#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;
спасибо всем.