如何使用循环返回javascript数组的某些部分?
我已经在这个问题上纠缠了好几个小时了,就是想不出来D: 可能更容易理解这个问题 我有两个选择框select_company和select_profile基本上当您从select company中选择某个内容时,select profile框将启用,并允许您从中选择与select company框相关的内容。我创建了一个包含3个伪对象的数组,就好像它是一个数据库一样如何使用循环返回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_
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;
}
}
});