无法从jQuery' $ .each

时间:2015-07-29 22:05:51

标签: javascript jquery arrays

我正在处理用户角色权限,为此我创建了一个这样的表单:

为每个复选框生成的HTML是

<div class="checker" id="uniform-department_create">
    <span>
        <input type="checkbox" 
               class="form-control department" 
               id="department_create" 
               name="department_create" 
               value="create">
    </span>
</div>

现在onSubmit我将调用一个可以提取用户权限的函数。它看起来像这样:

var designationForm = {

  // All permissions must be added to this Array
  // to manipulate checkboxes
  permissions: Array('department','customer','designation'),

  ...

  get_permissions: function() {
    var allowed = Array();
    $.each(designationForm.permissions, function(index, permission) {
      allowed[permission] = Array();
      $.each($("."+permission),function(input, value) {
        if ($("#uniform-"+$(value).attr('id') + " span").hasClass('checked')) {
          allowed[permission] += "{"+$(value).attr('value')+":"+"true},";
        } else {
          allowed[permission] += "{"+$(value).attr('value')+":"+"false},";
        }
      });
      return allowed[permission];
    });
    // console.log(allowed);
    return allowed;
  },
  ...
}

它的作用基本上是检查权限数组并迭代所有权限,如果它找到一个复选框的范围包含类&#34; Checked&#34;它将它添加到允许的数组中。

如果我console结果,那么我可以看到正确的返回但我无法返回结果数组。

1 个答案:

答案 0 :(得分:1)

  

如果我控制结果然后我可以看到正确的返回但我无法返回结果数组。

  

返回空数组

复制代码并将一些额外的div / spans添加到jsfiddle:jsfiddle.net/fk2x8w9x/1并查看控制台输出给出:

[department: "{create:false},{delete:false},", customer: "{create:true},", designation: Array[0]]

即所描述的空数组,但其值设置为&#34;数组&#34;的属性。

这是因为:

  • &#34;数组&#34;在javascript中就像任何其他对象一样,并且可以拥有自己的属性等。
  • 您可以设置obj.val =等属性,还可以通过索引器设置属性,例如obj["val"] =

这就是这里发生的事情 - 正在添加属性而不是数组&#34; items&#34;。

如果你换行:

var allowed = Array();
allowed[permission] = Array();

var allowed = {};
allowed[permission] = {};

然后它可能更有意义。