10

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

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

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

4

2 回答 2

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();
    }            
});
于 2012-02-21T10:44:33.047 回答
4

当心:

!a评估为真或假。如果转换为a布尔值,true!a计算结果为假。

所有正整数的计算结果为true。所以!a将评估为假。使用 double 等于 1 的比较将使用布尔值or==测试该布尔值。因此,如果我怀疑它是一个正整数,那么您的陈述将始终评估为假。!a1trueaif

如果您想测试 is something is NOT something else,您需要将比较运算符 ( ===) 中的第一个等号更改为!.

例如var a = 2; if(a!==1) { // do something }<-- A 为 2,因此 if 比较将评估为真,因为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
}

希望有帮助

PS记住你的比较运算符:

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

更新

我看到你对另一篇文章的评论说,直到事情发生,然后它a就是。01

在这种情况下:

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();
}
于 2012-02-21T10:54:30.223 回答