Jquery условие не работает - PullRequest
       4

Jquery условие не работает

2 голосов
/ 25 августа 2011

Я работаю над исправлением сайта, который написан кем-то другим.Коды действительно грязные, поэтому я боюсь, что не могу опубликовать все это здесь, но я считаю, что предоставил достаточно информации, чтобы вы могли понять, что может быть не так.Потому что в этот момент я потерялся.

1.Мы получаем минимальные и максимальные пределы

parent_id = '<?php echo $parent_id; ?>';
api = '<?php echo $api; ?>';
    $.getJSON('getlimits.php', {'id': ""+parent_id+"", 'api': ""+api+""}, function(data) {
        // Loop and assign Json (returned value) to our limit variables
        $.each(data, function(key, val) {
            min_limit = key;
            max_limit = val;
        });
    });

getlimits.php OutPut:

{"10":"15000"}

2.Мы проверяем пределы

amount = $('#quantity', this).val();

console.log(amount + ' - Max : ' + max_limit + ' Min : ' + min_limit);

if ( amount < min_limit) {
    displayError("You can't order less than " + min_limit + " units",2000);
    return false;
}
else if ( amount > max_limit ) {
    displayError("You can't order more than " + max_limit + " units.",2000);
    return false;
}

Зарегистрированные результаты;

800 - Max : 15000 Min : 10

Я набрал 800 единиц.Это не должно давать никаких ошибок, но я получаю следующую ошибку:

Вы не можете заказать более 15000 единиц.

Я действительно потерян.Журнал показывает правильные значения, getlimits.php возвращает правильные значения, но если & иначе, если условия не работают.

Я буду рад, если кто-нибудь может помочь мне с этой проблемой.

Спасибо ввперед.

Ответы [ 3 ]

7 голосов
/ 25 августа 2011

amount не является целым числом, когда вы перебираете его через .val().

Так настройте эту строку:

amount = $('#quantity', this).val();

до

amount = parseInt($('#quantity', this).val());

Как указал Деннис, вам также придется parseInt значения, которые вы извлекаете из JSON. (min_limit и max_limit).

Как также отметил Деннис, вы должны добавить 10 в качестве второго параметра к parseInt, чтобы убедиться, что он анализируется как десятичное число.

Итак:

$.each(data, function(key, val) {
    min_limit = parseInt(key,10);
    max_limit = parseInt(val,10);
});

amount = parseInt($('#quantity', this).val(),10);
1 голос
/ 25 августа 2011

Это потому, что вы сравниваете строку со строкой:

"800" > "15000" === true

Вам нужно преобразовать хотя бы один (желательно оба) в число с помощью parseInt:

$.each(data, function(key, val) {
    min_limit = parseInt(key);
    max_limit = parseInt(val);
});

amount = parseInt($('#quantity', this).val());
0 голосов
/ 25 августа 2011

Убедитесь, что вы вызываете parseInt(number, 10), чтобы получить числовую переменную. Похоже, вы сравниваете строки, которые дают вам отличные результаты от сравнения чисел. Второй параметр (10) - это основание, которое обеспечит получение десятичного значения.

Это необходимо сделать для min_limit и max_limit, а также для вызова .val(), который всегда будет возвращать строку.

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