JavaScript всегда возвращает true, даже если это не так

Это, наверное, самая странная проблема с JavaScript:

$('div.GiftContainer').live('click', function () {
    var self = $(this);
    var price = $(this).attr('data-price');
    if (!self.hasClass('selected')) {
        if (price <= MyCredits) { // always returns true
            alert('OK');
            self.addClass('selected').siblings().removeClass('selected');
        } else {
            alert('MOO!');
        }
    } else {
        self.removeClass('selected');
    }
});

Возвращает true, даже если я добавил console.log(price + ' ' + MyCredits); прямо перед тем, как условие и цена были меньше, чем MyCredits.

Что бы это могло быть...


person user1027620    schedule 02.02.2012    source источник
comment
Вы пробовали parseInt или одну из функций из этого семейства? Может быть, он анализирует его как строку или что-то в этом роде.   -  person Tango Bravo    schedule 02.02.2012
comment
да, это исправлено :) пожалуйста, ответьте на мой вопрос, чтобы я мог пометить его как принятый ответ. Спасибо!   -  person user1027620    schedule 02.02.2012
comment
MyCredits это строка или число?   -  person Mathias Bynens    schedule 02.02.2012


Ответы (3)


Попробуйте синтаксический анализ(). Это должно исправить это, чтобы убедиться, что они правильно интерпретируются JS.

person Tango Bravo    schedule 02.02.2012

В JavaScript есть типы. Это может сбить с толку, потому что это динамический язык. Попробуйте следующее, чтобы убедиться, что оба значения равны numbers:

if (parseInt(price, 10) <= parseInt(MyCredits, 10))

Вот дополнительная информация: http://en.wikibooks.org/wiki/JavaScript/Variables_and_Types

person Paul    schedule 02.02.2012

цена была меньше, чем MyCredits

Ну в таком случае price <= MyCredits верно. Так что ничего страшного.

person Niet the Dark Absol    schedule 02.02.2012