Итак, я пытаюсь заполнить массив через 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.
Есть предположения?
@ Li357, вы не помогаете, говоря «это не имеет смысла», вы можете сказать «пожалуйста, предоставьте весь свой код, чтобы мы могли помочь вам лучше» или что-то, что поможет ему предоставить больше контекста / деталей
Код находится в строке шаблона es6. возможно ошибка копирования и вставки? Он не будет работать как есть.
@ Li357 - это весь JS-код, имеющий отношение к этой проблеме. Я новичок в том, чтобы задавать вопросы о StackOverflow, извиняюсь за недостаточность.
@PatrickCoyle Если вы назначите optionValues пустому массиву, а затем немедленно зарегистрируете его, он останется пустым. И это не проблема области видимости, поскольку var имеет функциональную область видимости ...



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это потому, что ваш цикл проходит по всем параметрам на странице. Вы должны найти параметры в раскрывающемся списке. Поэтому используйте $(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);
}
});
});
Спасибо! Это ответ, который я искал.
@PatrickCoyle поставил галочку рядом с ответом, чтобы другие могли понять, что ОП получили требуемый ответ на вопрос.
Я сделал :) Мне оставалось только дождаться таймера.
Это весь ваш код? В этом нет никакого смысла.