Javascript 仅将下拉选项替换为与数组中的值匹配的选项

Javascript 仅将下拉选项替换为与数组中的值匹配的选项,javascript,jquery,Javascript,Jquery,嗨,我正在努力用原始JavaScript实现这一点。目前,我有两个下拉列表,一个是家长,另一个是孩子: <select id="state" title="" name="state"> <option selected="selected" value="Open" label="Open">Open</option> <option value="Closed" label="Closed">Closed</optio

嗨,我正在努力用原始JavaScript实现这一点。目前,我有两个下拉列表,一个是家长,另一个是孩子:

<select id="state" title="" name="state">
     <option selected="selected" value="Open" label="Open">Open</option>
     <option value="Closed" label="Closed">Closed</option>
 </select>



 <select id="status" title="" name="status">
      <option value="Open_New" label="New">New</option>
      <option value="Open_Assigned" label="Assigned">Assigned</option>
      <option value="Closed_Closed" label="Closed">Closed</option>
      <option value="Open_Pending Input" label="Pending External Input">Pending External Input</option>
      <option value="Open_Pending" label="Pending Internal Input">Pending Internal Input</option>
      <option value="Closed_Duplicate" label="Duplicate">Duplicate</option>
      <option value="Open_CARD" label="CARD">CARD</option>
      <option value="Open_Open" label="Open">Open</option>
      <option value="Open_DAD" label="DAD">DAD</option>
      <option value="Closed_Rejected" label="Rejected">Rejected</option>
   </select>
我的新代码如下所示:

   'open' => array(
    'Open_New',
    'Open_Assigned',
    'Open_Pending Input',
    'Open_Pending',
    'Open_CARD',
    'Open_Open',
    'Open_DAD'
),
 'closed' => array(
    'Open_Assigned',
    'Closed_Closed',
    'Closed_Duplicate',
    'Closed_Rejected',
),
function updateDynamicEnum(field, subfield, child_strings){

 //console.log(child_strings);

if(document.getElementById(subfield) != null){

    var de_key = document.getElementById(field).value;
    var child = document.getElementById(subfield);

    var current = [];
    for (var i = 0; i < child.length; i++) {
        if (child.options[i].selected) current.push(child.options[i].value);
    }

    if(de_entries[subfield]  == null){
        de_entries[subfield] =  new Array;
        for (var i=0; i<child.options.length; i++){
            de_entries[subfield][child.options[i].value] = child.options[i].text;
        }
    }

    document.getElementById(subfield).innerHTML = '';

    //this part needs changes 
    for (var key in de_entries[subfield]) {
        if(key.indexOf(de_key+'_') == 0){
            child.options[child.options.length] = new Option(de_entries[subfield][key], key);
        }
    }

但是,我努力想知道如何检查child_字符串并确定值是否在该数组中等…

我自己找到了答案,但如果有人能发布更好的,请继续

      function updateDynamicEnum(field, subfield, child_strings){

if(document.getElementById(subfield) != null){

    var de_key = document.getElementById(field).value;
    var child = document.getElementById(subfield);

    var current = [];
    for (var i = 0; i < child.length; i++) {
        if (child.options[i].selected) current.push(child.options[i].value);
    }

    if(de_entries[subfield]  == null){
        de_entries[subfield] =  new Array;
        for (var i=0; i<child.options.length; i++){
            de_entries[subfield][child.options[i].value] = child.options[i].text;
        }
    }

    document.getElementById(subfield).innerHTML = '';

    var arg = child_strings[de_key];

    for (var key in de_entries[subfield]) {

        if(isInArray(key,arg)){

            child.options[child.options.length] = new Option(de_entries[subfield][key], key);
        }
    }

      for (var key in current) {
        for (var i = 0; i < child.length; i++) {
            if(child.options[i].value == current[key])
                child[i].selected = true;
        }
    } 
}
 /*Checks if value is in an array*/
function isInArray(value, array) {
    return array.indexOf(value) > -1;
}

}

如果不使用jQuery,为什么jQuery是一个关键字?如果jQuery非常简单,我愿意接受它的解决方案。你的整个代码是:没关系,我从来没有写过原始代码。这就是问题所在,我本来会在jQuery中做的,但我真的只想快速更改它,以满足我的需要。@user794846,嗯,不,你真的想让我们改变它,这样它就能满足你的需要-
      function updateDynamicEnum(field, subfield, child_strings){

if(document.getElementById(subfield) != null){

    var de_key = document.getElementById(field).value;
    var child = document.getElementById(subfield);

    var current = [];
    for (var i = 0; i < child.length; i++) {
        if (child.options[i].selected) current.push(child.options[i].value);
    }

    if(de_entries[subfield]  == null){
        de_entries[subfield] =  new Array;
        for (var i=0; i<child.options.length; i++){
            de_entries[subfield][child.options[i].value] = child.options[i].text;
        }
    }

    document.getElementById(subfield).innerHTML = '';

    var arg = child_strings[de_key];

    for (var key in de_entries[subfield]) {

        if(isInArray(key,arg)){

            child.options[child.options.length] = new Option(de_entries[subfield][key], key);
        }
    }

      for (var key in current) {
        for (var i = 0; i < child.length; i++) {
            if(child.options[i].value == current[key])
                child[i].selected = true;
        }
    } 
}
 /*Checks if value is in an array*/
function isInArray(value, array) {
    return array.indexOf(value) > -1;
}

}