jQuery, если (x == y) не работает - PullRequest
0 голосов
/ 18 февраля 2011

Итак, у меня есть несколько ложных флажков (чтобы я мог их стилизовать), которые работают с jQuery, чтобы работать как проверенные или не проверенные.В моем документе есть несколько ложных флажков, и для каждого из них у меня есть функция щелчка:

var productInterest = [];
productInterest[0] = false;
productInterest[1] = false;
productInterest[2] = false;

// here is one function of the three:

$('#productOne').click(function() {
    if (productInterest[0] == false) {
        $(this).addClass("checkboxChecked");
        productInterest[0] = true;
    } else {
        $(this).removeClass("checkboxChecked");
        productInterest[0] = false;
    }
});

Кажется, проблема в том, что в операторе if есть ошибка, потому что он проверит,но не снимайте флажок.Другими словами, он добавит класс, но переменная не изменится, поэтому он все еще считает, что проверен.У кого-нибудь есть идеи?Спасибо за вашу помощь.

ОБНОВЛЕНИЕ: Итак, мне нужно показать вам весь мой код, потому что он работает так, как я его предоставил (спасибо комментаторам за помощь в понимании этого) ...просто не так, как на самом деле он используется на моем сайте.поэтому ниже, пожалуйста, найдите код целиком.

Все должно происходить в одной функции, потому что пользовательский интерфейс и данные для каждого флажка должны обновляться сразу.Итак, вот полная функция:

$('input[name=silkInterest]').click(function() { // they all have the same name

    var silkInterest = [];
    silkInterest[0] = false;
    silkInterest[1] = false;
    silkInterest[2] = false;

    if ($(this).is('#silkSilk')) { // function stops working because the .is()
        if (silkInterest[0] == false) {
            $(this).addClass("checkboxChecked");
            silkInterest[0] = true;
        } else {
            $(this).removeClass("checkboxChecked");
            silkInterest[0] = false;
        }
        alert(silkInterest[0]);
    }
    if ($(this).is('#silkAlmond')) {
        if (silkInterest[1] == false) {
            $(this).addClass("checkboxChecked");
            silkInterest[1] = true;
        } else {
            $(this).removeClass("checkboxChecked");
            silkInterest[1] = false;
        }
    }
    if ($(this).is('#silkCoconut')) {
        if (silkInterest[2] == false) {
            $(this).addClass("checkboxChecked");
            silkInterest[2] = true;
        } else {
            $(this).removeClass("checkboxChecked");
            silkInterest[2] = false;
        }
    }

    var silkInterestString = silkInterest.toString();
    $('input[name=silkInterestAnswer]').val(silkInterestString);
    // This last bit puts the code into a hidden field so I can capture it with php.

});

Ответы [ 2 ]

3 голосов
/ 18 февраля 2011

Я не могу определить проблему в вашем коде, но вы можете просто использовать класс, который вы добавляете, вместо массива productInterest. Это позволяет вам сжать код до одного:

// Condense productOne, productTwo, etc...
$('[id^="product"]').click(function() {
    // Condense addClass, removeClass
    $(this).toggleClass('checkboxChecked');
});

И чтобы проверить, проверен ли один из них:

if ($('#productOne').hasClass('checkboxChecked')) {...}

Это обеспечит синхронизацию пользовательского интерфейса с «данными», поэтому, если есть другой код, который мешает, вы сможете его обнаружить.

0 голосов
/ 18 февраля 2011

Хорошо, только что был момент ладонью ко лбу. Что касается моего пересмотренного кода - переменные сбрасываются каждый раз, когда я нажимаю. Это была проблема. Duh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...