Jump to content
  • 0

Как добавить слушатель внутри слушателя


Great Rash
 Share

Question

Вопрос странный конечно, но возникла такая необходимость. Думаю код скажет лучше чем я:

document.addEventListener('mouseover', function(e) {
if (prnt.onMouseOver(e)) {
prnt.scroll.addEventListener('DOMMouseScroll', function(e) { prnt.catchWheel(e) }, false);
}
}, false);

prnt.catchWheel(e) - должна отлавливать колесо мыши если курсор над определенным объектом (в случае если prnt.onMouseOver(e) вернет true)

В Мозилле все работает, а вот в Сафари и Хроме - нифига. Причем я опытным путем выяснил, что prnt.catchWheel(e) нормально отлавливает колесо мыши (во всех браузерах) и если вместо prnt.scroll.addEventListener('DOMMouseScroll', function(e) { prnt.catchWheel(e) }, false); написать просто alert('ok');, то все тоже работает.

Есть у кого соображения как заставить работать эту конструкцию в Хроме и Сафари?

UPD: Тему можно закрывать. Случайно набрел на ответ. Оказывается чтоб работало в Хроме и Сафари надо написать так:

document.addEventListener('mouseover', function(e) {
if (prnt.onMouseOver(e)) {
if (prnt.scroll.addEventListener) {
prnt.scroll.addEventListener('DOMMouseScroll', function(e) { prnt.catchWheel(e); }, false);
}

prnt.scroll.onmousewheel = function(e) { prnt.catchWheel(e); } // очень странно, какие-то происки ИЕ проглядываются
}
}, false);

А какой движок у Хрома и Сафари? Я почему то думал, что Хром на Gecko как и Мозилла... А оказывается что у Сафари с Хромом поведение одинаковое.

Edited by Great Rash
Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

С колесиком вообще нормальный дурдом получается:

Кручение колеса - это ивент, его надо приатачить к какому либо обьекту, в нашем случае это div. Вся проблема в том, что название этих ивентов в разных браузерах разные. В IE это событие называется onmousewheel, а в FireFox называется DOMMouseScroll.Opera в свою очередь использует название IE только без приставки on, тоесть mousewheel. Но Opera атачит ивенты как FireFox, а не как IE.

Цитата отсюда

Link to comment
Share on other sites

  • 0

Ну там то как раз я косяков не заметил. Да оно конечно выставляется/получается извращенным способом, но поведение предсказуемо. А вот с этими эвентами мегаизврат.

Link to comment
Share on other sites

  • 0
Метод attachEvent() применяется, в основном, дляопределения поведения IE, но его можно также использовать для привязки обработчика событий к объекту. Метод detachEvent() выполняет обратное действие. Он не может отключить события, привязка которых была выполнена в атрибутах дескриптора или установкой свойств события.

Пример:

myObject.onmousedown = setHilite

//равносильно

myObject.attachEvent("onmousedown", setHilite)

Цитата отсюда

Вы понимаете зачем вы использовали addEventListener? По той же причине необходимо использовать attachEvent.

В данном случае использован первый вариант из приведенного примера.

Edited by dyadya
Link to comment
Share on other sites

  • 0
myObject.onmousedown = setHilite

//равносильно

myObject.attachEvent("onmousedown", setHilite)

В данном случае использован первый вариант из приведенного примера.

Справочник, утверждающий что запись "myObject.onmousedown = setHilite" равносильна записи "myObject.attachEvent("onmousedown", setHilite)" , можно смело выкидывать на помойку.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy