2009-11-02 2 views
0

Этот код ниже работает отличноwindow.parent селектор JQuery не работает в IE8

$('html').bind('mousewheel', function(event, delta) { 
    window.parent.scrollBy(-120 * delta,0); 
    return false; 
}); 

но один не может кто-нибудь сказать мне, почему. Мне бы очень хотелось узнать.

$(window.parent).bind('mousewheel', function(event, delta) { 
    window.parent.scrollBy(-120 * delta,0); 
    return false; 
}); 

Я хотел бы уточнить, что селектор window не работает в этом случае тоже.

+0

Я решил использовать рабочую версию, если у вас есть рабочий код, почему возникает вопрос, почему неисправная рабочая версия неисправна ?! – Mohammad

ответ

1

Проблема может заключаться в том, что оболочка обработчика событий jQuery должна использовать window.event для извлечения текущего события в IE. Если вы установите обработчик из окна A в событии в окне B, сценарий в окне A будет смотреть на окно A window.event, в то время как событие действительно происходит в окне B.

Но может быть больше проблем, чем это , слишком. Скрипты между окнами/кадрами чреваты трудностями, и jQuery специально не предназначен для их работы. Для правильной работы jQuery кросс-фрейма вам обычно понадобится экземпляр jQuery в обоих окнах, и вы должны использовать только соответствующий экземпляр jQuery ($) для взаимодействия с каждым окном.

ета повторно комментарий:

ОК, посмотрев в mousewheel дальше, я не знаю, как ваш код может работать в Firefox (это, конечно, не для меня). Firefox не поддерживает mousewheel событий вообще; вместо этого он поддерживает DOMMouseScroll событий. Также для других браузеров, поддерживающих mousewheel, он должен быть привязан к узлу DOM, а не к окну. Так что я думаю, что вы ищете это:

if ('MouseScrollEvent' in window) { 
    $(document).bind('DOMMouseScroll', function(event) { 
     return scroll(event.detail*-40); 
    }); 
} else { 
    $(document).bind('mousewheel', function(event) { 
     return scroll(event.wheelDelta); 
    }); 
} 

function scroll(d) { 
    window.scrollBy(-d, 0); 
    return false; 
}; 

(Однако в WebKit это будет остановить прокрутку, когда мышь перемещается из горизонтальной области, соответствующей ширине окна просмотра Вы можете предпочесть, чтобы связать события в. более широкий элемент, такой как div, если он заполняет браузер.)

+0

hi bobice, в этом случае есть только одно окно, и я попробовал «window.event» вместо «event» в обработчике, но он производит только синтаксические ошибки, как в Dreamweaver, так и в IE8. – Mohammad

+0

Если есть только одно окно, почему вы получаете доступ к 'window.parent'? – bobince

+0

Во всяком случае, свойство delta обычно доступно как «event.wheelDelta». Но если у вас есть синтаксические ошибки, вы даже не добираетесь так далеко! – bobince

Смежные вопросы