event.preventDefault在Firefox中不起作用

时间:2014-10-03 11:23:46

标签: javascript jquery html firefox

我不确定原因,但出于某种原因event.preventDefault()来电并不适用于Firefox。我正在使用它阻止点击a链接,将您重定向到href,而是运行点击功能。标记如下:

jQuery的:

$('.sub-list-click a').click(function() {
    event.preventDefault();

    var sub = $(this).parent("li").next(".sub, .homepage-sub");

    if (sub.css('display') == 'none') {

        $(".sub, .homepage-sub").slideUp();
        $(".sub, .homepage-sub").children("li").animate({
            opacity: "0"
        }, 10);               

        setTimeout(function() { 
            sub.slideDown();                  
        }, 200);
        setTimeout(function() {
            sub.children("li").animate({
                opacity: "1"
            }, 200); 
        }, 500);   

    } else {
        sub.slideUp();
    }      

    return false;
});

它适用于我测试的所有其他浏览器,只是Firefox似乎有一些问题。

2 个答案:

答案 0 :(得分:4)

您需要在Click函数处理程序中添加event作为参数,如下所示:

$(document).ready(function () {
    $('.sub-list-click a').click(function (event) {
        event.preventDefault();
        var sub = $(this).parent("li").next(".sub, .homepage-sub");

        if (sub.css('display') == 'none') {
            $(".sub, .homepage-sub").slideUp();
            $(".sub, .homepage-sub").children("li").animate({
                opacity: "0"
            }, 10);

            setTimeout(function () {
                sub.slideDown();
            }, 200);
            setTimeout(function () {
                sub.children("li").animate({
                    opacity: "1"
                }, 200);
            }, 500);

        } else {
            sub.slideUp();
        }
    });
});

另请注意,此示例包含在document.ready事件中(您可能已经执行此操作,但由于它不明显,我会将其添加为注释)

这里的“工作”示例(阻止链接的后续内容,而不是任何动画内容):
http://fiddle.jshell.net/79uuqmho/1/

修改/更新
它在Firefox中不起作用的原因是因为使用event.something会为您提供一个未定义的事件错误,该错误会停止脚本的执行。另一方面,Chrome不会给出异常(可能是由于事件在窗口对象的某处定义)并允许脚本执行向下返回false; (与{event.preventDefault(); / * AND * / event.stopPropagation();}

相同

答案 1 :(得分:0)

使用事件方法参数中的任何对象,即:

$('.sub-list-click a').click(function(e) {
    e.preventDefault();
    // other code
}