Javascript event.preventDefault()在Chrome中工作,但在Firefox/IE中不工作

Javascript event.preventDefault()在Chrome中工作,但在Firefox/IE中不工作,javascript,jquery,firefox,preventdefault,Javascript,Jquery,Firefox,Preventdefault,我知道在这个问题上已经有很多问题了,但我已经读了很多,仍然无法让我的剧本发挥作用 我有一个非常基本的幻灯片,可以在这里看到:www.screations.net/wm(有3个幻灯片,我对所有3个都有相同的问题) 以下是我用于导航的代码: <a href="#"><img src="images/arrow_right.png" class="nextSlide" onclick="nextSlide();"/></a> <a href="#">&l

我知道在这个问题上已经有很多问题了,但我已经读了很多,仍然无法让我的剧本发挥作用

我有一个非常基本的幻灯片,可以在这里看到:www.screations.net/wm(有3个幻灯片,我对所有3个都有相同的问题)

以下是我用于导航的代码:

<a href="#"><img src="images/arrow_right.png" class="nextSlide" onclick="nextSlide();"/></a>
<a href="#"><img src="images/arrow_left.png" class="prevSlide" onclick="prevSlide();"/></a>
现在,这在Chrome上可以正常工作,但在Firefox/IE上,虽然脚本仍然可以工作,但它会重新加载页面。请问我该怎么修/


谢谢

如果不将事件传递到函数中,则无法阻止该事件

按以下方式更改您的链接:

onclick="nextSlide(event);"
function nextSlide(event){ // <-- Accept the event parameter here...
    // Move this first in the function....
    event.preventDefault();
    $('.slide').eq(0).fadeIn(fadeSpeed);
} 
然后,按如下方式更改您的函数:

onclick="nextSlide(event);"
function nextSlide(event){ // <-- Accept the event parameter here...
    // Move this first in the function....
    event.preventDefault();
    $('.slide').eq(0).fadeIn(fadeSpeed);
} 

函数nextSlide(event){/运行时需要将事件传递到函数中

通常在执行其他操作之前先运行event.preventDefault(),但这不是100%必需的

$(function(){
    $("img.nextSlide").on("click",function(e){
        e.preventDefault();
        $('.slide').eq(0).fadeIn(fadeSpeed);
    })

    $("img.prevSlide").on("click",function(e){
        e.preventDefault();
        $('.slide').eq(0).fadeOut(fadeSpeed);   
    })
})

从函数体来看,有两个明显的问题

function nextSlide(){
 $('.slide').eq(0).fadeIn(fadeSpeed);
 event.preventDefault();
}
您没有传递
事件
,因此在调用此函数时,JS假定
事件
来自全局范围。其次,您通常希望在开始执行任何操作之前阻止默认操作,例如:

function nextSlide(event) {
 event.preventDefault(); // <- That should come first
 $('.slide').eq(0).fadeIn(fadeSpeed);
}

如果不将事件传递到函数中,并且如果不希望函数中包含
事件
参数,则不能期望
event.preventDefault()
工作。如果使用jQuery,为什么不使用它正确附加事件处理程序(而不是内联属性)?这里真正的谜团是为什么该代码在Chrome中工作,它不应该。它可能与您将事件处理程序附加到没有默认值的
img
标记有关。
event
不是全局的,它应该作为参数传递到处理程序。
函数nextSlide(event){/*now event实际存在!*/}
。正如其他人提到的,使用
onclick
是一种不好的做法,为
a
标记提供一个id,并使用jQuery附加事件:
jQuery(“#下一步”)。单击(nextSlide)
.No.
事件。preventDefault
只需要在一个处理程序中调用。@Bergi好的,你是对的,这不是100%必要的。但是你通常这样做是为了可读性。编辑了我的答案。他使用的是类,而不是ID。选择器应该是
img.slideNext
而不是
。\slideNext
@Bergi-很好的捕获。我很困惑在内联属性处理程序代码中,只有
事件
标识符可用于事件对象。当然,您可以使用
函数nextSlide(e){e.preventDefault();…}