FireFox中事件传播的问题

时间:2011-04-20 07:22:38

标签: jquery event-propagation

我正在使用以下代码来阻止事件传播:

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萤火虫说'e'是不确定的。我远不是一个jquery大师,我不明白为什么e未定义,但它真的吗?我以为var e 定义它吗?

我该怎么办呢?

为愚蠢的问题道歉 - 我自学成才,随时随地挑选。

MTIA

2 个答案:

答案 0 :(得分:4)

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 documentation非常好,我建议阅读它。特别是在这种情况下,关于the Event object

另请查看此tutorial

答案 1 :(得分:0)

返回false后不会执行任何代码。 将return false返回到函数的最后一行。