数组元素的未定义值

时间:2017-10-26 21:59:24

标签: javascript jquery

我有一个月份名称的数组,并且想要使用select元素追加,但是使用for循环传递它时显示未定义的值。 代码在下面

var month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'];

for(var i = 0 ; i < month.length ;i++ ){
  $(document).ready(function(){ 
   $('#date').append("<option >"+ month[i] +"</option>");
  }
});

6 个答案:

答案 0 :(得分:3)

它在DOM准备好之前进行迭代。您希望for循环在$(document).ready函数调用中

var month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'];
var monthday = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31];
var years = [ 1970,  1971,  1972,  1973,  1974,  1975,  1976,  1977,  1978,  1979,  1980,  1981,  1982,  1983,  1984,  1985,  1986,  1987,  1988,  1989,  1990,  1991,  1992,  1993,  1994,  1995,  1996,  1997,  1998,  1999,  2000,  2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017 ];

//append month to the date
$(document).ready(function(){ 
  for (var i = 0; i < month.length; i++) {
    console.log(i);
    $('#date').append("<option >"+ month[i] +"</option>");
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select id="date"></select>

答案 1 :(得分:3)

使用let,而不是var:

$(document).ready(function(){ 
    for(let i = 0 ; i < month.length ;i++ ){
        $('#date').append("<option >"+ month[i] +"</option>");
       }
    }
});

否则,您将整个时间打印一个月[12],这是一个未定义的值,因为您的数组只有11个索引。

答案 2 :(得分:1)

您的问题可以简化,

所以这里有一个片段,其中包含了无关的部分。

有几个问题,你的for循环错误的地方,你错过了}

&#13;
&#13;
var month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'];
//append month to the date

$(document).ready(function(){
  var selDate = $("#date");
  for(var i = 0 ; i < month.length ;i++ ){
    selDate.append("<option >"+ month[i] +"</option>");
  }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="date"/>
&#13;
&#13;
&#13;

答案 3 :(得分:1)

就个人而言,我会将月份映射到一系列选项,然后立即将它们全部附加。这导致一次更新,您不必跟踪索引。

$(document).ready(function(){
  var month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'];
  
  $('#date').append($.map(month, function(month){
    return '<option>'+ month +'</option>';
  }));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="date"></select>

答案 4 :(得分:0)

将文档就绪功能置于文档就绪功能的顶部和内部for循环

$(document).ready(function(){ 
for(var i = 0 ; i < month.length ;i++ ){
  console.log(i);
  $('#date').append("<option >"+ month[i] +"</option>");
}
});

答案 5 :(得分:0)

var month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'];
 var monthday = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31];
 var years = [ 1970,  1971,  1972,  1973,  1974,  1975,  1976,  1977,  1978,  1979,  1980,  1981,  1982,  1983,  1984,  1985,  1986,  1987,  1988,  1989,  1990,  1991,  1992,  1993,  1994,  1995,  1996,  1997,  1998,  1999,  2000,  2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017 ];

 //append month to the date
 $(document).ready(function(){ 
   for(var i = 0 ; i < month.length ;i++ ){
     console.log(i);
     $('#date').append("<option >"+ month[i] +"</option>");
  }
 });