2012-02-21 2 views
9

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

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

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

+4

* Является ли выше код правильный * Почему вы спрашиваете? У вас проблемы? Если да, то какие? –

+0

Что такое 'a'? Можете ли вы опубликовать его в своем коде? – elclanrs

+3

Будьте осторожны, есть разница между '==' и '==='. Если вы хотите проверить, равен ли 'a' целому числу' 1', вы должны использовать 'a === 1'. См. Http://stackoverflow.com/questions/359494/javascript-vs-does-it-matter-which-equal-operator-i-use для разницы. –

ответ

9

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

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

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

UPDATE

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

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

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

my a - это var, который удерживает значение 0 до тех пор, пока не будет выполнено условие. – esafwan

+1

ах, я понимаю, и в этом случае я обновил свой ответ. –

+1

Чтобы не путать себя, вы могли бы использовать 'true' и' false' вместо '0' и' 1'. –

3

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

!a принимает значение истина или ложь. Если преобразование a в bool составляет true, то !a оценивает значение false.

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

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

E.g. var a = 2; if(a!==1) { // do something } < - A равно 2, и поэтому сравнение if оценивается как 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 

Update

Я видел ваш комментарий на другой пост, который сказал, что 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(); 
} 
+0

Спасибо, что это было очень подробное объяснение. Узнал намного больше, чем я спросил. – esafwan

Смежные вопросы