【发布时间】:2014-08-12 13:28:14
【问题描述】:
很抱歉问这个问题,我讨厌在这里问,我不想被视为吸血鬼,但我很坚持这个问题,我不认为我在正确的路线上所有,如果这根本没有意义,请发表评论,我会尝试解释。我很绝望!
基本上,我的工作要求您选择一家公司,当您这样做时,它会生成一些复选框。当您从下拉列表中选择配置文件时,它需要勾选相应的复选框。它应该勾选的复选框是该配置文件在其 PRIVILEGE_PROFILES.PRIVILEGE CODES 中的任何内容(这些是复选框)。
我的代码在这里 http://jsfiddle.net/shaunyweasel/dj8jr19e/5/ 。数组位于小提琴的顶部。我试图这样做,以便如果标签的文本值等于 SEC_PRIVILEGES.Name 然后勾选这些复选框,但这并没有真正起作用,所以我不确定是否有更好的方法来解决它.下面的方法是我一直在努力尝试让它勾选复选框,但我很确定它是错误的。
$(document).on('change', '#select_profile', function () {
var select = $("#select_profile option:selected").text(),
selectedProfile, privileges, div, label, access;
var checked = document.getElementsByTagName('input');
for (var i = 0; i < checked.length; i++) {
if (checked[i].type == 'checkbox') {
checked[i].checked = false;
}
}
if (select !== 'None') {
for (var i = 0; i < PRIVILEGE_PROFILES.length; i++) {
if (PRIVILEGE_PROFILES[i].PROFILE_ID === select) {
selectedProfile = PRIVILEGE_PROFILES[i];
privileges = selectedProfile.PRIVILEGE_CODE;
}
}
for (var i = 0; i < SEC_Privileges.length; i++) {
if (privileges[i] === SEC_Privileges[i].Unique_Code) {
console.log(privileges);
var labels = document.getElementsByTagName('label');
var checked = document.getElementsByTagName('input');
for (var c = 0; c < checked.length; c++) {
if (SEC_Privileges[i].Name == labels) {
checked[c].checked = true;
}
}
}
}
}
});
如果这没有意义,这里是它如何工作以及我在哪里卡住的一步一步:
用户从 company_selection 下拉列表中选择一家公司
选择公司后,它会根据其 COMPANY_PRIVILEGES.UNIQUE_CODE(数组)为该公司生成复选框
然后用户必须从 profile_selection 中选择一些内容,并且根据他们选择的配置文件,它将检查相应的复选框,具体取决于它具有的 PRIVILEGE_PROFILES.PRIVILEGE_CODES。 (因此,如果您选择 Crew,那么它只会勾选 View Tyrell 框,因为这是它拥有的唯一配置文件)
【问题讨论】:
-
在你的 jsFiddle 你有 access.type = 'checkbox';这段代码。您可以添加 ID 属性并根据下拉选择将其选中为真或假。比如 access.id='test';access.checked='true'; (HTH)
-
如果我理解正确的话,我想知道您打算如何将 json 中的值和标签文本连接起来,例如:
DASuper和Dispatch App Supervisor。如果在生成时向它们中的任何一个添加一个类DASuper会更容易......或者使用标签和数组中的东西...... -
@TJ 这似乎是少数几种方法之一,我不确定除了标签的值等于数组中的值。有没有更简单的方法?
标签: javascript jquery html checkbox