如果条件为false则阻止默认

时间:2012-02-21 10:40:29

标签: javascript jquery conditional preventdefault

我有一个链接。当有人点击它时,我想在检查它之前检查一些条件。如果是false,则应该阻止默认操作。

$(".pager-next a.active").click(function(event) {
    if (!a == 1) {
        event.preventDefault();
    }           
});

该链接仅在a等于1时才有效。以上代码是否正确。如果满足特定条件,则a设置为1。该链接仅在满足条件时才有效。

2 个答案:

答案 0 :(得分:10)

假设'只应在a等于1 '时才有效,你的意思是a元素的文本等于1,试试这个:

$(".pager-next a.active").click(function(event) {
    if ($(this).text() != "1") {
        event.preventDefault();
    }           
});

您可以修改text()以使用jQuery中可用的元素属性。

<强>更新

  

我的a是一个var,它保持值0直到满足条件。

在这种情况下,问题只是你的相等运算符不正确:

$(".pager-next a.active").click(function(event) {
    if (a != 1) {
        event.preventDefault();
    }            
});

答案 1 :(得分:3)

小心:

!a评估为真或假。如果将a转换为bool为true,则!a的评估结果为false。

所有正整数都评估为true。因此!a将评估为false。使用double等于==到1的比较将使用布尔值!a1测试布尔值true。因此,如果a是一个正整数,因为我怀疑它是if语句将始终评估为false。

如果你想测试是不是别的东西,你需要将比较运算符(===)中的第一个等号更改为!

E.g。 var a = 2; if(a!==1) { // do something }&lt; - A为2,因此if比较wille评估为true,因为a 等于1

在您的代码中,我们有:

var a = 2;
if(!a==1){
  // a was 2 (or boolean true by default)
  // but using ! has negated its boolean value
  // so !a evaluates to boolean false
  // which is being compared to 1 (evaluating to boolean true)
  // so this if statement will never get here
}

希望有所帮助

P.S。记住你的比较运算符:

!"hello world" == 0 // true
!"hello world" === 0 // false

更新

我在另一篇帖子中看到了您的评论,该帖子说a0,直到发生了某些事情,然后1

在这种情况下:

var a = 0; // integer 0 or bool false
if(!a==1){ // if the bool opposite of 0 (false) is equal to 1 (true)
  // well, opposite of false is true, so you're checking if true is equal to true
  // so this will get called
  e.preventDefault();
}