Выполните цикл по массиву и установите значение любых входных данных html, которые соответствуют значениям массива

#html #jquery #arrays #match

Вопрос:

Я пытаюсь найти наиболее эффективный способ перебора массива строк, а затем установить соответствующий флажок, соответствующий любому из значений, найденных в массиве.

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

 <script>
    var comodArr = ['Gold','Copper'];
    jQuery(document).ready(function() {
        jQuery("#setfilters").click(function() {
            <!-- Commodities -->
            if(jQuery.inArray("Gold", comodArr) !== -1) {
                jQuery('li[val="Gold"] input').click();
            }
            if(jQuery.inArray("Silver", comodArr) !== -1) {
                jQuery('li[val="Silver"] input').click();
            }
            if(jQuery.inArray("Copper", comodArr) !== -1) {
                jQuery('li[val="Copper"] input').click();
            }
        });
    });
</script>

<a class="btn btn-primary" href="#" id="setfilters" style="display: inline-block;"><i class="fas fa-arrow-down">amp;nbsp;</i> Set Filters</a>

 

Обновленный код после ответа ниже. Намного лучше!

 <script>
    var fieldVals = ['Gold', 'Copper'];
    var fieldValArr = fieldVals.split(', ');
    jQuery(document).ready(function() {
        jQuery("#setfilters").click(function() {
            fieldValArr.forEach(fieldVal => jQuery("li[val='"   fieldVal   "'] input").click());
        });
    });
</script>
 

Комментарии:

1. Нужно ли вам иметь возможность отменить это, если пользователь изменит фильтры?

2. Не уверен, что это нужно. О чем ты там думаешь? Массив устанавливается динамически при загрузке страницы. Это должна быть кнопка, которая предварительно устанавливает фильтры на основе известных интересов пользователя, сохраненных в базе данных.

3. Трудно вносить предложения, не зная, как должен работать пользовательский интерфейс

4. Ну, если бы это не было очевидно, я манипулирую уже существующим пользовательским интерфейсом, чтобы добиться результата удобства использования, который не был запланирован разработчиком. Я определяю значения «моих» интересов и проверяю входные данные, чтобы получить быстрый отфильтрованный результат. Можно по-прежнему использовать текущий пользовательский интерфейс для выбора/отмены выбора по мере необходимости.

Ответ №1:

Пройдите по массиву.

 comodArr.forEach(comod => jQuery(`li[val="${comod}"] input`).click()); 

Кстати, вы не должны добавлять нестандартные атрибуты, такие как val элементы. Если вам нужно добавить свои собственные атрибуты, используйте data-XXX , например data-val="Gold"

Комментарии:

1. Идеально! Очень признателен. Не мой код, которым я манипулирую, но согласовал нестандартные attrs по элементам.