@ZeroSteep
Только учусь web-разработкам

Почему не воспринимает «0» за цифру?

Ребят есть вот такой код,суть которого должен отследить сколько цифр введено в инпут согласно маске их 4 разных(используется inputmask) сколько должно быть цифр задано data-value, но проблема в том что почти все работает если в номере полиса не вводить "0" Почему то 0 он не принимает как число и не добавляет в массив, хотя в инпуте вводится 0, подскажите по чему это а то че то не соображу... все это надо конечно же через keyup так как он отслеживает нажатие клавиш и если стирать номер он отслеживает изменение в отличии от keypress.

('.b-registry-form__choice-policy input').change(function (e) {
                    var data = $(this).data();
                    var $dataval = $('.b-registry-form__radio-btn').filter(':checked').data('value');
                    console.log('дата вал',$dataval);
                    $polises.filter('.active').removeClass('active').css({display: 'none'});
                    $polises.filter('[data-polis-type="' + data.polisType + '"]').addClass('active').css({display: ''});

                    $policy.val('').inputmask({
                        inputEventOnly: true,
                        mask: data.polisMask,
                        placeholder: 'X',
                        oncomplete: function () {
                            $date.focus();
                        }
                    }).attr('placeholder', data.polisMask.toString().replace(/9/g, 'Х')).focus();
// выше для полноты картины кода, ниже уже сам код по вопросу...
$('.b-registry-form__input.b-registry-form__input--policy.border-hover-portal').keyup(function(){
                        var arr = $policy.val().split('');  //разбиваем строку
                        var set= [];     //новый массив в который собирается вводимые цифры
                        arr.forEach(function(item, i) {
                            if(Number(item)) {    //из строки в цифры
                                set.push(item);     //добавляет в массив
                                if (set.length === $dataval){    // сравнивает кол-во цифр в массиве 
                                    $('.b-btn--red').css("background", "#003BF4");
                                }else{
                                    $('.b-btn--red').css("background", "#F46800");
                                }

                            }
                        })
                    });
                }).filter(':checked').change();
 })(jQuery);
  • Вопрос задан
  • 193 просмотра
Решения вопроса 1
Stalker_RED
@Stalker_RED
0 приводится к false же.
Вместо if(Number(item)) можно написать if(Number.isInteger(item))

Или вообще выбросить этот цикл и сделать так:
let x = $policy.val().replace(/[^\d]/g, '') // строка в которой только цифры
if (x.length === ... )
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
it_monk
@it_monk
Разработчик в oncloud.ru
Number('0'), как ни странно, возвращает 0. Условие if (0) не выполнится, сами понимаете...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы