Window.parent JQuery селектор не работает в IE8 - PullRequest
0 голосов
/ 02 ноября 2009

Этот код ниже работает нормально

$('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 в этом случае также не работает.

1 Ответ

1 голос
/ 02 ноября 2009

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

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

eta re comment:

ОК, изучив 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, если он заполняет браузер.) *

...