Javascript event.preventDefault()在Chrome中工作,但在Firefox/IE中不工作
我知道在这个问题上已经有很多问题了,但我已经读了很多,仍然无法让我的剧本发挥作用 我有一个非常基本的幻灯片,可以在这里看到:www.screations.net/wm(有3个幻灯片,我对所有3个都有相同的问题) 以下是我用于导航的代码: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
<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();…}
。