1

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

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

4

2 回答 2

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 文档非常好,我建议阅读它。尤其是在这种情况下关于Event对象

也看看这个教程

于 2011-04-20T07:26:10.650 回答
0

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

于 2011-04-20T07:26:12.227 回答