Как предотвратить заполнение массива JavaScript при загрузке страницы?

Итак, я пытаюсь заполнить массив через JQuery на основе значений параметров в нескольких элементах выбора. Для каждого элемента select я хочу, чтобы массив воссоздавался как пустой массив и снова заполнялся новыми параметрами. Однако, когда я проверяю массив в консоли, кажется, что он уже заполнен элементами из каждого элемента select, как только страница загружается.

Вот мой код javascript:

$( document ).ready(function() {
   $('#reportForm select').each(function(){
        var optionValues=[];
        console.info(optionValues);
        $('option').each(function(){
           if ($.inArray(this.value, optionValues) >-1){
               $(this).remove()
           }else{
              optionValues.push(this.value);
                }
           });
       });
    });

В первом console.info () в массиве должно быть ноль элементов, но их больше 200.

Есть предположения?

Это весь ваш код? В этом нет никакого смысла.

Andrew Li 09.08.2018 17:04

@ Li357, вы не помогаете, говоря «это не имеет смысла», вы можете сказать «пожалуйста, предоставьте весь свой код, чтобы мы могли помочь вам лучше» или что-то, что поможет ему предоставить больше контекста / деталей

duxfox-- 09.08.2018 17:06

Код находится в строке шаблона es6. возможно ошибка копирования и вставки? Он не будет работать как есть.

dgeare 09.08.2018 17:07

@ Li357 - это весь JS-код, имеющий отношение к этой проблеме. Я новичок в том, чтобы задавать вопросы о StackOverflow, извиняюсь за недостаточность.

Patrick Coyle 09.08.2018 17:08

@PatrickCoyle Если вы назначите optionValues пустому массиву, а затем немедленно зарегистрируете его, он останется пустым. И это не проблема области видимости, поскольку var имеет функциональную область видимости ...

Andrew Li 09.08.2018 17:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
5
132
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это потому, что ваш цикл проходит по всем параметрам на странице. Вы должны найти параметры в раскрывающемся списке. Поэтому используйте $(this).find('option') вместо $('option'), например,

$('#reportForm select').each(function(){
    var optionValues=[];
    console.info(optionValues);
    $(this).find('option').each(function(){ // $(this).find will only find options inside the current select
       if ($.inArray(this.value, optionValues) >-1){
           $(this).remove()
       } else {
          optionValues.push(this.value);
       }
    });
});

Спасибо! Это ответ, который я искал.

Patrick Coyle 09.08.2018 17:09

@PatrickCoyle поставил галочку рядом с ответом, чтобы другие могли понять, что ОП получили требуемый ответ на вопрос.

Rohan Kumar 09.08.2018 17:16

Я сделал :) Мне оставалось только дождаться таймера.

Patrick Coyle 09.08.2018 17:17

Другие вопросы по теме

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

Могут ли два скрипта узла на одном компьютере блокировать друг друга?
Элементы оболочки JavaScript во время forEach () не работают
JavaScript запускает неправильную функцию прослушивателя событий
Скрыть панель навигации при прокрутке вниз за x пикселей и показать при прокрутке вверх
Как включить офлайн-данные в firestore для Интернета
JavaScript: установите цвет фона <td> в таблице, содержащей <select>, в зависимости от того, какой <option> выбран
Фиксированный заголовок и фиксированная боковая навигация со статическим нижним колонтитулом, боковая навигация сворачивается с нижним колонтитулом
Скрипт Javascript / ajax работает, только если точка отладки установлена ​​в инструментах разработчика
Кнопка фильтра тега листовки и плагины MarkerCluster.LayerSupport - интеграция для создания фильтров по щелчку для обновления кластеров
React Transforming Server Response (добавление дополнительного поля к объекту)