myskif
@myskif
Верстальщик

Как удалять последний символ в цикле js?

Есть интуп и множество значений в select, необходимо при вводе сравнивать значение инпута с селектом и в случае совпадения - выбирать это значение в селект (тут всё ок)
Но если совпадение не найдено удалять последний символ и снова сравнивать (если копипастом вставили) до тех пор пока не совпадет или не останется в строке лишь 2 символа

$('#zip_code').on( "input", function() {
                var zip = $(this).val().toUpperCase();
                
                $('.select__control option').each(function(i){
                    var group = $(this).text();
                    if (group==zip) {
                    	$(this).prop('selected', true).trigger('change');
                    }
                    else {
                        zip2 = zip.substring(0, zip.length - i);
                        console.log(zip2);
                        if (group==zip2) {
                        	$(this).prop('selected', true).trigger('change');
                        }
                    }
                });
                
            });
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Aricus
Честно говоря, не понимаю, как получился даже такой результат. У вас цикл $('.select__control option') внутри такого же цикла, хотя должен быть внутри цикла уменьшения размера строки. Я бы написал примерно так (за отсутствие ошибок не ручаюсь). Кстати, лучше использовать let вместо var, чтобы объявлять переменную только внутри области видимости, а не глобально.
$('#zip_code').on( "input", function() {
                let zip = $(this).val().toUpperCase();
                outer: while (zip.length > 2) { // outer - метка для прерывания. Если длина маленькая, цикл вообще не запустится.
                    $('.select__control option').each(function(){ // Тут - уже ваш цикл
                        let group = $(this).text();
                        if (group==zip) {
                    	    $(this).prop('selected', true).trigger('change');
                    	    break outer; // Если есть совпадение, цикл прерывается
                        }
                    });
                    zip = zip.substring(0, zip.length - i); // Уменьшаем на один символ длину строки поиска и запускаем цикл по новой
                }
            });
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы