Javascript “未定义”不是下拉列表中的对象

Javascript “未定义”不是下拉列表中的对象,javascript,Javascript,我希望我的代码通过添加slative类来显示菜单,并更改ddown集合中输入的值。我有一些代码,它不能像控制台那样工作,在第9行,norddown[I],norslitem[j]都是对象,因为它们是未定义的。如何解决这个问题 var slitems = document.getElementsByClassName('slitem'); ddown = document.getElementsByClassName('ddown'); for(i=0; i<ddown.length

我希望我的代码通过添加
slative
类来显示菜单,并更改
ddown
集合中输入的值。我有一些代码,它不能像控制台那样工作,在第9行,nor
ddown[I]
,nor
slitem[j]
都是对象,因为它们是未定义的。如何解决这个问题

var slitems = document.getElementsByClassName('slitem');
    ddown = document.getElementsByClassName('ddown');
for(i=0; i<ddown.length; i++) {
    ddown[i].addEventListener('click', function(){document.getElementById('sl'+i).classList.add('slactive');valueChange()});
}
function valueChange(){
    for(j=0;j<slitems.length;j++){
        slitems[j].addEventListener('click', function(){
            ddown[i].value = slitems[j].value;
            document.getElementById('sl'+i).classList.remove('slactive');
        });
    }
}
var slitems=document.getElementsByClassName('slitem');
ddown=document.getElementsByClassName('ddown');

对于(i=0;i看,你所做的至少有两个缺陷:

第一:执行此操作时:对于(i=0;i 第二:i被设置为ddown.length,这是一个在数组中不存在的位置,因此会出现错误

要解决此问题,请使用var将i设置为局部变量,并将其作为参数传递:

var slitems = document.getElementsByClassName('slitem');
    ddown = document.getElementsByClassName('ddown');
for(var i=0; i<ddown.length; i++) {
    ddown[i].setAttribute("data-index", i);
    ddown[i].addEventListener('click', function(e){
         var i = e.target.dataset.index;
         document.getElementById('sl'+i).classList.add('slactive');valueChange(i)
    });
}
function valueChange(i){
    for(var j=0;j<slitems.length;j++){
        slitems[j].setAttribute("data-index", j);
        slitems[j].setAttribute("data-index2", i);
        slitems[j].addEventListener('click', function(e){
            var j = e.target.dataset.index;
            var i = e.target.dataset.index2;
            ddown[i].value = slitems[j].value;
            document.getElementById('sl'+i).classList.remove('slactive');
        });
    }
}
var slitems=document.getElementsByClassName('slitem');
ddown=document.getElementsByClassName('ddown');

对于(var i=0;i看,你所做的至少有两个缺陷:

第一:执行此操作时:对于(i=0;i 第二:i被设置为ddown.length,这是一个在数组中不存在的位置,因此会出现错误

要解决此问题,请使用var将i设置为局部变量,并将其作为参数传递:

var slitems = document.getElementsByClassName('slitem');
    ddown = document.getElementsByClassName('ddown');
for(var i=0; i<ddown.length; i++) {
    ddown[i].setAttribute("data-index", i);
    ddown[i].addEventListener('click', function(e){
         var i = e.target.dataset.index;
         document.getElementById('sl'+i).classList.add('slactive');valueChange(i)
    });
}
function valueChange(i){
    for(var j=0;j<slitems.length;j++){
        slitems[j].setAttribute("data-index", j);
        slitems[j].setAttribute("data-index2", i);
        slitems[j].addEventListener('click', function(e){
            var j = e.target.dataset.index;
            var i = e.target.dataset.index2;
            ddown[i].value = slitems[j].value;
            document.getElementById('sl'+i).classList.remove('slactive');
        });
    }
}
var slitems=document.getElementsByClassName('slitem');
ddown=document.getElementsByClassName('ddown');

对于(var i=0;我可能也想看一看:@Bogdan非常感谢!可能也想看一看:@Bogdan非常感谢!现在
slitems[j]
未定义。现在
slitems[j]
未定义。