我正在使用以下代码来阻止事件传播:
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
答案 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返回到函数的最后一行。