如何防止JavaScript数组在页面加载时填充?
因此,我试图通过JQuery根据multipleselect元素中的选项值填充一个数组。对于每个select元素,我希望将数组重新创建为空数组,并用新选项再次填充。但是,当我在控制台中检查数组时,它似乎已经装满了页面加载后每个select元素中的项目 以下是我的javascript代码:如何防止JavaScript数组在页面加载时填充?,javascript,jquery,arrays,Javascript,Jquery,Arrays,因此,我试图通过JQuery根据multipleselect元素中的选项值填充一个数组。对于每个select元素,我希望将数组重新创建为空数组,并用新选项再次填充。但是,当我在控制台中检查数组时,它似乎已经装满了页面加载后每个select元素中的项目 以下是我的javascript代码: $( document ).ready(function() { $('#reportForm select').each(function(){ var optionValues=[];
$( document ).ready(function() {
$('#reportForm select').each(function(){
var optionValues=[];
console.log(optionValues);
$('option').each(function(){
if($.inArray(this.value, optionValues) >-1){
$(this).remove()
}else{
optionValues.push(this.value);
}
});
});
});
在第一个console.log()上,数组中应该没有元素,但是它有200多个元素
有什么想法吗?这是因为您的循环正在遍历页面上的所有选项。您必须在“选择”下拉列表中找到选项。因此使用
$(this)。查找('option')
代替$('option')
类似
$('#reportForm select').each(function(){
var optionValues=[];
console.log(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);
}
});
});
这就是你的全部密码吗?这没有任何意义。@Li357如果你说“这没有任何意义”,你可以说“请提供你所有的代码,以便我们能更好地帮助你”,或者说一些能引导他提供更多上下文/细节的东西。这些代码在es6模板字符串中。可能是复制粘贴错误?它不会按原样执行。@Li357这是与此问题相关的所有JS代码。我对StackOverflow的问题不太熟悉,很抱歉没有提供足够的信息。@PatrickCoyle如果您将
optionValues
分配给一个空数组,然后立即记录它,它将保持为空。这不是一个范围问题,因为var
是函数范围…谢谢!这就是我一直在寻找的答案。@PatrickCoyle在答案上打了个勾,这样其他人就可以理解老年退休金计划得到了这个问题所需的答案。我做到了:)我只需要等待计时器。