Если условия ложные, то предотвратить дефолт - PullRequest
9 голосов
/ 21 февраля 2012

У меня есть ссылка.Когда кто-то нажимает на это, я хочу проверить некоторые условия, прежде чем позволить ему работать.Если это false, то действие по умолчанию должно быть запрещено.

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

Ссылка должна работать, только если a равно 1.Является ли приведенный выше код правильным.a устанавливается на 1, если выполняется определенное условие.Ссылка должна работать только при соблюдении условия.

Ответы [ 2 ]

10 голосов
/ 21 февраля 2012

Предполагая, что ' должно работать, только если a равно 1 ', вы имеете в виду, что текст элемента a равен 1, попробуйте следующее:

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

Youможете изменить text(), чтобы использовать любой атрибут элемента, доступный вам в jQuery.

ОБНОВЛЕНИЕ

my a - это переменная, которая содержит значение0, пока не будет выполнено условие.

В этом случае проблема заключалась просто в том, что ваш оператор равенства был неверен:

$(".pager-next a.active").click(function(event) {
    if (a != 1) {
        event.preventDefault();
    }            
});
3 голосов
/ 21 февраля 2012

Будьте осторожны:

!a оценивается как истинное или ложное. Если преобразование a в логическое значение равно true, тогда !a оценивается как ложное.

Все натуральные числа оцениваются как true. Так что !a будет оцениваться как ложное. Сравнение с использованием двойных равных == к 1 проверит, что логическое !a с логическим 1 или true. Так что, если a является положительным целым числом, как я подозреваю, тогда ваше утверждение if ВСЕГДА оценивается как ложное.

Если вы хотите проверить, что-то НЕ является чем-то другим, вам нужно изменить первые равные в вашем операторе сравнения (===) на !.

например. var a = 2; if(a!==1) { // do something } <- A равно 2, и поэтому сравнение if будет иметь значение true, поскольку <code>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

Обновление

Я видел ваш комментарий к другому сообщению, в котором говорилось, что a - это 0, пока что-то не произойдет, тогда это 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();
}
...