从Javascript数组生成多个复选框?

时间:2014-07-30 13:09:46

标签: javascript jquery html

我的jsfiddle将有助于更好地解释事情>< http://jsfiddle.net/L65QD/17/

我有两个选择框,当你从第一个选择中选择它时会启用第二个选择框。我有很多数组,我正在使用它作为一个虚假的数据库。

我需要发生的是,取决于在profile_select中选择的内容,它需要为它拥有的每个PRIVILEGE_CODE生成复选框,但是必须使用它们旁边的SEC_PRIVILEGES.Name而不是实际的PRIVILEGE_CODE生成复选框,它们必须是在正确的DIV中生成。因为我很难解释我制作了一个JSFiddle,它只是总结了它http://jsfiddle.net/L65QD/17/

如果我的指示不明确:

  1. 取决于在PROFILE_SELECTION中选择的配置文件
  2. 需要根据其所拥有的PRIVILEGE_PROFILES.PRIVILEGE_CODES生成一些复选框
  3. 但是,复选框必须具有SEC_PRIVILEGES旁边的名称而不是代码,因此PRIVILEGE_CODES = Unique_Code
  4. 复选框是根据它们在SEC_PRIVILEGES中的Group_Code在DA div或MR div中生成的(这一点真的让我感到困惑,你可以这样做,所以DIV ID可以等于来自数组的东西吗?)但是要在DA或MR中生成它们它实际上不是一个IF,因为我的小提琴只是一个例子,我实际上有大约30个不同的代码,所以我不能做30个IF语句。
  5. 这是我正在尝试的方法,但它并没有真正意义,甚至可能不是在正确的线上:

       $(document).on('change', '#select_profile', function () {
        var Select = $("#select_profile option:selected").text();
        $("#apps").html;
        for (var i = 0; i < SEC_Privileges.length; i++) {
            if (SEC_Privileges[i].Unique_Code == //something?) {
                $('#DA').html("<b>lol</b>");
    
            }
    
        }
    });
    

2 个答案:

答案 0 :(得分:3)

这很简单:

  • 更正此致命错误:数组文字以方括号表示法编写([],而不是())。当您记录PRIVILEGE_PROFILE[0].PRIVILEGE_CODE时,您只会看到第一个代码被记录为密钥的值。
  • 构建功能:考虑您需要的内容:
    • 当用户更改公司时,必须重置所有复选框
    • 当用户更改个人资料时,必须重置所有复选框,然后相应地更改
    • 当&#39;无&#39;在下拉列表中选中,必须重置所有复选框

结果:http://jsfiddle.net/kevinvanlierde/L65QD/19/

一些惯例:

  • 请选择一个命名约定并坚持使用。较常见的是 lowercase_underscore CamelCase 。您可以选择大写,但不要混用它们(更易于阅读)。我之所以有错误只是因为我写错了名字。
  • 在函数开头声明变量,进一步分配它们。

还想补充一点,如果我要控制对象的结构,我可能会选择更加分层的树/ JSON类结构,例如代替当前对象,执行:

var SEC_Privileges = {
    'DA': {
       'name': 'Dispatch App',
       'accesses': {
           'DAAccess': 'Access',
           'DASuper': 'Supervisor'
       }
    },
    'MR': {
       'name': 'MyRoster', 
       'accesses': {
           'MRAccess': 'Access',
           'MRSuper': 'Supervisor'
       }
    }
}

因为对象键本身就是值,所以您可以使用它们来构建您的用户界面,例如获取MRAccess的全名,您可以执行SEC_Privileges.MR.name + SEC_Privileges.MR.accesses.MRAccess之类的操作来获取MyRoster Access

答案 1 :(得分:2)

有不同的方法可以解决这个问题,但特权的数量总是相同的吗?根据你的SEC_privileges是什么,如果它的JSON数组,那么你可以遍历该数组并访问代码和描述。然后,您需要再次验证整个集合中的所选权限,并说出如下内容:

var array = ('one','two','three');

if($.inArray(SEC_privileges[i].Unique_code, array))
{
$('#DA').html("<input type='checkbox' id='"+i+"' value='"+SEC_privileges[i].Unique_code+"' checked/>"+SEC_privileges[i].Unique_desc);
}
else
{
 $('#DA').html("<input type='checkbox' id='"+i+"' value='"+SEC_privileges[i].Unique_code+"'/>"+SEC_privileges[i].Unique_desc);
}

通过添加单词checked作为html输入对象的一部分来完成勾选值。如上图所示