开发者问题收集

PreventDefault 对我来说不起作用

2012-11-13
315

我对preventDefault()感到困惑。

我得到了下面的测试

$('.next').click(function(e){
        if(e.preventDefault){
            console.log("asdfnext");
            e.preventDefault();
        }else{
            console.log("next");
            return false;   
        }       
    });

这是工作文件的一部分。

<a class='next' href='http://www.bbc.co.uk'>Next</a>
<a class='previous' href='http://www.facebook.com'>previous</a>

根据上述内容,我可以阻止我的链接转到bbc或facebook。 你可以在这里查看 http://jsfiddle.net/puQ7H/

但是当我尝试按照如下方式实现它时,我失败了,我真的很想知道为什么

$('#step0Next').click(function(e){
            if($(this).is('.disabled')){
                console.log("disabled");                    
                    if(e.preventDefault){
                        console.log("asdfnext");
                        e.preventDefault();
                        return false;   
                    }else{
                        console.log("next");
                        return false;   
                    }   

            }else{
                console.log("not disabled");    
            }

        });

基本上==> step0Next 是我的链接 id

我的 css 如下:

a.disabled { opacity:0.2; cursor: default; }

我的想法是,如果链接处于 ('.disable') 状态, 则停止进入下一步。

实际上链接进入下一步,我在这里停止。:P

3个回答

您正在使用 if 块检查 .preventDefault 是否存在,为什么?试试这个:

$('#step0Next').click(function(e){
    if($(this).hasClass('disabled')){
        console.log("disabled");                    
        e.preventDefault();   
    } else {
        console.log("not disabled");    
    }
});

实际上 .hasClass() 速度更快一些,因为它不通过选择器引擎运行。

samy-delux
2012-11-13

尝试使用 event.isDefaultPrevented()

if(e.isDefaultPrevented()){

}

Description: Returns whether event.preventDefault() was ever called on this event object.

wirey00
2012-11-13

您不需要 return false; ,而且我并不认为该检查是相关的。请尝试使用以下方法:

$('#step0Next').click(function(e){
       if($(this).is('.disabled')){
            console.log("asdfnext");
            e.preventDefault();
       }else{
           console.log("not disabled");    
       }
});​
Andrei R
2012-11-13