0

我对 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

4

3 回答 3

2

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

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

而且实际上.hasClass()要快一点,因为它没有通过选择器引擎运行。

于 2012-11-13T15:56:58.713 回答
1

尝试使用event.isDefaultPrevented()

if(e.isDefaultPrevented()){

}

说明:返回是否曾在此事件对象上调用 event.preventDefault()。

于 2012-11-13T15:02:53.787 回答
1

你不需要return false;,我真的不认为支票是相关的。尝试改用这个:

$('#step0Next').click(function(e){
       if($(this).is('.disabled')){
            console.log("asdfnext");
            e.preventDefault();
       }else{
           console.log("not disabled");    
       }
});​
于 2012-11-13T15:07:34.083 回答