jQuery onclick, только если условие переменной выполнено - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть кнопка, которая при нажатии должна выполнять свой код, только если число div, имеющих класс «like», больше 0. Проблема в том, что, даже если это правда, кнопка все равно не будетвыполнить свой код.Обратите внимание, что я пробовал и .length и .size () к одному и тому же результату.

$(document).ready(function() {
countlikes = $('[id^=post_].like').length;
likestatus = 1;
$('#show_likes').on('click', function() {
    if (countlikes >0) {
        likestatus++;

        $('[id^=post_].like').toggle();

        if (likestatus % 2 == 0) {
            $('#hidelikedbtn').removeClass('hidelikedimgoff').addClass('hidelikedimgon');
        } else {
            $('#hidelikedbtn').removeClass('hidelikedimgon').addClass('hidelikedimgoff');
        }

    return false;

    } else {
        return false;
    }
});
});

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 09 ноября 2011

Предполагая, что количество элементов с классом «like» меняется после загрузки страницы, проблема в том, что вы в настоящее время присваиваете значение countlikes только один раз, вне обработчику щелчков, поэтому каждый раз обработчик запускает его, используя исходное значение countlikes, а не текущий счет. Переместите назначение в обработчик, и оно должно работать. (Хотя данная переменная фактически используется только в одном месте в тот момент, когда она вам действительно не нужна, вы можете просто проверить $('[id^=post_].like').length непосредственно в своем операторе if.)

Также ваш вопрос говорит: «больше 1», а ваш код - «> 0», поэтому, даже если он сработает, он не будет делать то, что вы описываете.

Также, независимо от вашей проблемы, последний случай else является избыточным: в конце if вы возвращаете false, а в противном случае вы возвращаете false, так почему бы просто не переместить return false; за пределы если и удалить остальное?

0 голосов
/ 09 ноября 2011

Вам нужно var перед вашей переменной 'countlike'.

Кроме того, вам понадобится то же самое перед вашей другой переменной.

...