Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.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_Jquery_Html - Fatal编程技术网

如何使用循环返回javascript数组的某些部分?

如何使用循环返回javascript数组的某些部分?,javascript,jquery,html,Javascript,Jquery,Html,我已经在这个问题上纠缠了好几个小时了,就是想不出来D: 可能更容易理解这个问题 我有两个选择框select_company和select_profile基本上当您从select company中选择某个内容时,select profile框将启用,并允许您从中选择与select company框相关的内容。我创建了一个包含3个伪对象的数组,就好像它是一个数据库一样 var PRIVILEGE_PROFILES = [ { PROFILE_ID: "ADickinson", COMPANY_

我已经在这个问题上纠缠了好几个小时了,就是想不出来D:

可能更容易理解这个问题

我有两个选择框select_company和select_profile基本上当您从select company中选择某个内容时,select profile框将启用,并允许您从中选择与select company框相关的内容。我创建了一个包含3个伪对象的数组,就好像它是一个数据库一样

   var PRIVILEGE_PROFILES = [
{ PROFILE_ID: "ADickinson", COMPANY_CODE: "GW", PRIVILEGE_CODE: ("AlAccess", "AlBlockAccess", "AlAdmin", "DispatchAppAccess"), SECTOR: "01" },
{ PROFILE_ID: "CHague", COMPANY_CODE: "TP", PRIVILEGE_CODE: "DispatchAppAccess", SECTOR: "02" },
{ PROFILE_ID: "JWilliams", COMPANY_CODE: "XC", PRIVILEGE_CODE: ("AlAccess", "AlBlockAccess"), SECTOR: "03" },
];

   var COMPANIES = [
{ Company: "XC" },
{ Company: "TP" },
{ Company: "GW" }

];
COMPANY_CODE表示COMPANY_select对象,因此将公司代码加载到COMPANY_select框中,例如,如果选择了XC,则会将名称JWilliams加载到profile_select中。我已经使用if语句实现了这一点,但是我不能使用if语句,因为我将在数组中添加更多内容,并且我不能只为每个公司代码执行30个左右的if语句。若要使其工作,选择框将加载当前的公司配置文件,其中的公司必须等于特权配置文件数组中的公司代码

  var companyselectHTML = "<select name='select_company' id='select_company'           class='form_drop_down' data-role='none'>" +
      "<option>None</option>";


var profileselectHTML = "<select name='select_profile' id='select_profile' class='form_drop_down' data-role='none'>" +
"<option>None</option>";


for (var p = 0; p < COMPANIES.length; p++) {
    companyselectHTML += "<option value='" + COMPANIES[p].Company + "'>" + COMPANIES[p].Company + "</option>";
}
这就是我的选择框的生成方式,以及将特权加载到其中的基本循环。 然而这就是我被卡住的地方,我不知道如何让循环工作。我有一个好心的用户帮我做的,它确实会将PROFILE_ID加载到选择框中,但只使用IF语句,我不能使用30个IF语句。一定有更简单的方法

   $(document).on('change', '#select_company', function () {
          if ($(this).val() == "GW") $('#select_profile').append("<option value='" + PRIVILEGE_PROFILES[0].PROFILE_ID + "'>" + PRIVILEGE_PROFILES[0].PROFILE_ID + "</option>")

    $('#select_profile option[value="ADickinson"]').remove();
});
所以我试着使用某种循环,但没有成功。它不会返回任何东西,可能是错的我不是一个很好的程序员。如果有人能帮助我,你就是一个绝对的上帝

     var Select = document.getElementById("select_company").value;

   $(document).on('change', '#select_company', function () {
        for (var i = 0; i < PRIVILEGE_PROFILES.length; i++) {
            if (PRIVILEGE_PROFILES[i].COMPANY_CODE == Select) {
            $('#select_profile').append("<option value='" + PRIVILEGE_PROFILES[i].PROFILE_ID +      "'>" + PRIVILEGE_PROFILES[i].PROFILE_ID + "</option>");
           }

            else {
            $('#select_profile option').remove();
        }
    }

});
所以,如果这毫无意义,我将写一个小总结。 用户从公司选择框中选择公司 然后,与所选公司相同的任何公司代码都将显示在“选择配置文件”复选框中
如果我发现了这一点,就不能真正使用IF语句,因为我计划在数组中添加更多语句。

也许这就是您要找的

演示:


代码中的几个问题:

您在加载页面时设置Select,而不是在用户从“公司选择”菜单中选择内容时设置Select

当循环在特权配置文件中发现不匹配的值时,您的循环将从配置文件选择菜单中删除所有选项。相反,您应该在循环之前清空菜单,然后在循环期间用匹配值填充它

PRIVILEGE_PROFILES变量是formatAppSelect函数的本地变量,因此无法从更改事件处理程序访问。它需要在两个功能之外的范围内

工作代码


没有真正了解你在这里要做的事情的全部要点。您只是想根据select_公司发生的事情来选择select_概要文件,还是它们必须是循环引用?i、 e.如果您选择profile-x,那么您还必须选择company-x?配置文件是否也可以填充,因为当前没有任何配置文件作为值。当然,您希望所有选项都在其中,并且只有在选择特定公司时才真正选择正确的选项?Hi Rob可能重复,是的,应能够根据在选择公司上选择的内容来选择选择选择配置文件。例如,如果在“公司”框中选择了XC,我希望将其中包含GW的唯一阵列选项从“特权”配置文件加载到“选择”配置文件框中,这将是JWilliams,因为他有一个与“公司”框匹配的XC公司代码。所以你所说的是正确的,它目前是无的,因为我不能让它工作,因为我不是最好的javascript。我希望这会清除它。您在函数中设置变量Select了吗?哦,对不起,我错过了那一点。Barmar,var Select=document.getElementByIdselect\u company.value;我甚至不知道这是否有必要,我只是在试验。这正是我想要的,谢谢你解释我做错了什么:我正在添加一个新函数,根据选择配置文件中选择的内容,它将用户权限代码加载到多个复选框中的div中。事情发生变化时,它会是几乎相同的方法吗?是的,基本结构应该是相同的。嗨,巴玛,希望你读到这篇文章。使用您的方法,我尝试将一个新的人添加到PRIVILEGE_PROFILES数组中,他也有公司代码XC,但是它只加载JWilliams。不管我是什么意思,你能帮我吗我假设它们是唯一的,我的循环在找到匹配项时会中断。如果有多个匹配项,就把它去掉。哦,是的,那就解决了。再次感谢我对错误解释的错误:我放弃了向上投票,因为这几乎是我想要的,但它加载了所有3个,而不是所选的一个:
$(document).ready(function () {


    var COMPANIES = [{
        Company: "XC"
    }, {
        Company: "TP"
    }, {
        Company: "GW"
    }

    ];
    var PRIVILEGE_PROFILES = [{
        PROFILE_ID: "ADickinson",
        COMPANY_CODE: "GW",
        PRIVILEGE_CODE: ("AlAccess", "AlBlockAccess", "AlAdmin", "DispatchAppAccess"),
        SECTOR: "01"
    }, {
        PROFILE_ID: "CHague",
        COMPANY_CODE: "TP",
        PRIVILEGE_CODE: "DispatchAppAccess",
        SECTOR: "02"
    }, {
        PROFILE_ID: "JWilliams",
        COMPANY_CODE: "XC",
        PRIVILEGE_CODE: ("AlAccess", "AlBlockAccess"),
        SECTOR: "03"
    }, ];



    var companyselectHTML = "<select name='select_company' id='select_company' class='form_drop_down' data-role='none'>" +
        "<option>None</option>";

    var profileselectHTML = "<select name='select_profile' id='select_profile' class='form_drop_down' data-role='none'>" +
        "<option>None</option>";


    for (var p = 0; p < COMPANIES.length; p++) {
        companyselectHTML += "<option value='" + COMPANIES[p].Company + "'>" + COMPANIES[p].Company + "</option>";
    }
    companyselectHTML += "</select>";
    $("#company_selection").html(companyselectHTML);



    for (var p = 0; p < PRIVILEGE_PROFILES.length; p++) {
        profileselectHTML += "<option value='" + PRIVILEGE_PROFILES[p].PROFILE_ID + "'>" + PRIVILEGE_PROFILES[p].PROFILE_ID + "</option>";
    }
    profileselectHTML += "</select>";
    $("#profile_selection").html(profileselectHTML);


    $(document).on('change', '#select_company', function () {
        var val = $(this).val();
        console.log(val);
        for (var i = 0; i < PRIVILEGE_PROFILES.length; i++) {
            if (PRIVILEGE_PROFILES[i].COMPANY_CODE == val) {
                $('#select_profile').val(PRIVILEGE_PROFILES[i].PROFILE_ID);
            }
            /* else {
            $('#select_profile option').remove();
        }*/
        }

    });

});
var PRIVILEGE_PROFILES = [{
    PROFILE_ID: "ADickinson",
    COMPANY_CODE: "GW",
    PRIVILEGE_CODE: ("AlAccess", "AlBlockAccess", "AlAdmin", "DispatchAppAccess"),
    SECTOR: "01"
}, {
    PROFILE_ID: "CHague",
    COMPANY_CODE: "TP",
    PRIVILEGE_CODE: "DispatchAppAccess",
    SECTOR: "02"
}, {
    PROFILE_ID: "JWilliams",
    COMPANY_CODE: "XC",
    PRIVILEGE_CODE: ("AlAccess", "AlBlockAccess"),
    SECTOR: "03"
}, ];

formatAppSelect();

function formatAppSelect() {

    var COMPANIES = [{
        Company: "XC"
    }, {
        Company: "TP"
    }, {
        Company: "GW"
    }

    ];

    var companyselectHTML = "<select name='select_company' id='select_company' class='form_drop_down' data-role='none'>" +
        "<option>None</option>";

    var profileselectHTML = "<select name='select_profile' id='select_profile' class='form_drop_down' data-role='none'>" +
        "<option>None</option>";

    for (var p = 0; p < COMPANIES.length; p++) {
        companyselectHTML += "<option value='" + COMPANIES[p].Company + "'>" + COMPANIES[p].Company + "</option>";
    }

    profileselectHTML += "</select>";
    $("#profile_selection").html(profileselectHTML);

    companyselectHTML += "</select>";
    $("#company_selection").html(companyselectHTML);

}

$(document).on('change', '#select_company', function () {
    var Select = $(this).val();
    $("#select_profile").empty().append("<option>None</option>");
    for (var i = 0; i < PRIVILEGE_PROFILES.length; i++) {
        if (PRIVILEGE_PROFILES[i].COMPANY_CODE == Select) {
            $('#select_profile').append("<option value='" + PRIVILEGE_PROFILES[i].PROFILE_ID + "'>" + PRIVILEGE_PROFILES[i].PROFILE_ID + "</option>");
            break;
        }
    }

});