проблема с распространением событий в FireFox - PullRequest
1 голос
/ 20 апреля 2011

Я использую следующий код для предотвращения распространения событий:

function mapSlider(e) {
if ($('.slideme').hasClass('open')) {
        $('.slideme').animate({left:0,},'slow').removeClass('open');
        $('.opened').hide();
        $('.closed').show();
        } else {
        $('.slideme').animate({left:-710,},'slow').addClass('open');
        $('.opened').show();
        $('.closed').hide();
        }
        return(false);

        if (!e) var e = window.event;
        e.cancelBubble = true;
        if (e.stopPropagation) e.stopPropagation();
        e.preventDefault();
        e.stopImmediatePropagation();
}

Он работает в Chrome и Safari, но не в Opera или Firefox (еще даже не пытался использовать IE!).FF firebug говорит, что «е» не определено.Я далеко не гуру jquery, и я не понимаю, почему e не определено, но так ли это на самом деле?Я думал, что var e определяет это?

И как мне исправить это?

Извиняюсь за глупые вопросы - я самоучка и поднимаю вещикак я иду.

MTIA

Ответы [ 2 ]

4 голосов
/ 20 апреля 2011

jQuery объединяет все эти различия браузера.Вам просто нужно сделать:

function mapSlider(e) {
    if ($('.slideme').hasClass('open')) {
        $('.slideme').animate({left:0,},'slow').removeClass('open');
        $('.opened').hide();
        $('.closed').show();
    } else {
        $('.slideme').animate({left:-710,},'slow').addClass('open');
        $('.opened').show();
        $('.closed').hide();
    }
    e.stopPropagation();
    e.preventDefault();
}

В вашем примере код внизу никогда не будет выполнен, как вы делаете return false; раньше.

Теперь это зависит только от как эта функция вызывается.Если вы правильно назначите его как обработчик события, тогда объект события будет автоматически передан.

Обновление:

В вашем коде вы не передаете eventвозражать против вашего обработчика.Вы должны сделать:

<div id="map-box" class="slideme" onClick="mapSlider(event)">

но я думаю, что это не работает в IE.

Так что лучше сделать это способом jQuery:

$(function() {
    $('#map-box').click(mapSlider);
});

Документация jQuery довольно хорошая, я рекомендуючитая это.Особенно в этом случае о объекте Event .

Также посмотрите этот учебник .

0 голосов
/ 20 апреля 2011

Код после возврата false не будет выполнен. переместить возврат false в последнюю строку вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...