Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
相互依赖<;选择>;使用JavaScript进行编程_Javascript_Html_Forms - Fatal编程技术网

相互依赖<;选择>;使用JavaScript进行编程

相互依赖<;选择>;使用JavaScript进行编程,javascript,html,forms,Javascript,Html,Forms,我有一个javascript日期数组,格式为 {year:'2010',month:'6',day:'23'} 我需要有三个连续,第一个填充列表中的年份,第二个填充第一个选择的年份中的月份,第三个填充与所选年份和月份对应的日期 我无法访问像jQuery这样的库 处理此问题的最佳方法是什么?要检索年份数据以设置初始选择,您必须至少遍历数组一次(希望只有一次) 由于您希望填充第二个select以响应第一个select,并基于第二个select和第一个select填充第三个select,因此需要一种

我有一个javascript日期数组,格式为

{year:'2010',month:'6',day:'23'}
我需要有三个
连续,第一个填充列表中的年份,第二个填充第一个选择的年份中的月份,第三个填充与所选年份和月份对应的日期

我无法访问像jQuery这样的库


处理此问题的最佳方法是什么?

要检索年份数据以设置初始选择,您必须至少遍历数组一次(希望只有一次)

由于您希望填充第二个select以响应第一个select,并基于第二个select和第一个select填充第三个select,因此需要一种快速的方法来引用它们

我首先填充select,同时将数据整理到一个更易于检索的系统中。我在这里使用带键的数组,其他人可能会建议使用带键的对象

/* Global variables */
var arr = new Array({year:'2010',month:'6',day:'23'},
                    {year:'2011',month:'6',day:'23'},
                    {year:'2010',month:'5',day:'23'});
var srt = new Array();

function populateArrs()
{
for(var i=0;i<arr.length;i++)
{
  var y = arr[i].year;
  var m = arr[i].month;
  var d = arr[i].day;
  var in_select = false;

  /* Month array, day array */
  var mArr;
  var dArr;

  if(srt[y] != null)
  {
    mArr = srt[y];
    in_select = true;
  }
  else
    mArr = new Array();


  if(mArr[m] != null)
    dArr = mArr[m];
  else
    dArr = new Array();

  if(dArr[d] == null)
    dArr[d] = d;
  /* No else as at this stage it will already exist in array set */

  mArr[m] = dArr;
  srt[y] = mArr;

  /* Don't duplicate values in the select */
  if(!in_select) 
  {
    var opt = document.createElement('option');
    opt.value = y;
    opt.text = y;
    /* Get your year select */
    var ySel = document.getElementById('year_select'); 
    ySel.appendChild(opt);
  }
}
}

if (window.addEventListener)
  window.addEventListener("load", populateArrs, false);
else if (window.attachEvent)
  window.attachEvent("onload", populateArrs);
天数:


希望这能有所帮助。

因为您没有jQuery或其他第三方的标签,我认为您最好的朋友就是简单地循环(例如,
for
)。因为它是javaScript,所以你真的没有太多的选择。@rlb.usa:是的。我只想知道用最简单的方法处理这个问题的最佳实践。
var ySel = document.getElementById('year_select');
var mArr = srt[ySel.options[ySel.selectedIndex].value];
for( x IN mArr)
  /* Populate month select */
/*As above, then */
var mSel = document.getElementById('month_select');
var dArr = srt[mSel.options[mSel.selectedIndex].value];