无法在Javascript

时间:2015-07-08 09:35:21

标签: javascript jquery multidimensional-array

我根据我的role_id插入二维数组中的值,即

var tdarray = [[]]; 
tdarray[40].push(22); 

其中40是我的role_id,22是它的值。 但是,当我打印此值时,它显示为null

alert(tdarray[40][0]); //this shows no value.

我猜jquery中的二维数组不允许在特定位置插入值。可以建议我能做些什么来克服这个问题。 整个代码在这里

var tdarray = [[]];
var incr = 1;
var check;
$(function () {
    $('.toggle_checkbox').change(function () {
        if (check === null) {} else {
            if (this.name == check) {
                incr++;
            } else {
                incr = 1;
            }
        }
        var tval = $(this).val();
        check = this.name;
        tdarray[this.name].push(tval);
    });
});

Html代码

<table border = "0"
cellspacing = "0"
cellpadding = "1" >
    <tbody>
               <c:forEach items="${accessRightValues}" var="rights" >
        <tr style="height: 40px;">
            <td style="width: 240px;"><input type="checkbox" name="<c:out value="${rights.roleid}"/>" value="1" class="toggle_checkbox"> Add </td>
            <td style="width: 240px;"><input type="checkbox" name="<c:out value="${rights.roleid}"/>" value="2" class="toggle_checkbox">Update</td>
            <td style="width: 240px;"><input type="checkbox" name="<c:out value="${rights.roleid}"/>" value="3" class="toggle_checkbox">View </td>
             <td style="width: 240px;"><input type="checkbox" name="<c:out value="${rights.roleid}"/>" value="4" class="toggle_checkbox">Delete </td>
            <td style="width: 240px;"><input type="checkbox" name="<c:out value="${rights.roleid}"/>" value="5" class="toggle_checkbox">Assign </td>
        </tr>

        </c:forEach>   

        </tbody> < /table>

我的问题是id 40可以容纳多个值。所以我想知道如何在jquery中使用多维数组来实现它。也可以有多个role_id,例如50,57,这将再次拥有更多比一个值。请帮我一下。        我想在我的弹簧控制器中传递这个二维数组。             tdarray [40] [0] = 1;             tdarray [40] [1] = 3;             tdarray [40] [2] = 5;             tdarray [48] [0] = 2;             tdarray [48] [1] = 3;

其中40,48是用户的role_id,1,3,5是access_rights,我想将其存储在数据库中。

3 个答案:

答案 0 :(得分:3)

为了在密钥40中使用push()函数,您还必须将该位置初始化为数组。

var tdarray = []; 
tdarray[40] = [];
tdarray[40].push(22)

// It works now
alert(tdarray[40][0]);

在您提供的代码中:

    var tdarray = [];

    ... 

    // Check if it's an array before initialize
    if(!tdarray[this.name] instanceof Array) {
        tdarray[this.name] = []; // or tdarray[this.name] = new Array();
    }
    tdarray[this.name].push(tval);

答案 1 :(得分:0)

可能是明显的解决方案,但如果您希望能够通过密钥(例如40)访问您的值,为什么不使用对象呢?

var tdarray = {};

if ( ! tdarray['40']) tdarray['40'] = [];
tdarray['40'].push(22)

答案 2 :(得分:0)

你必须检查它是否已经是一个数组,如果它没有创建它。

var tval = $(this).val();
       check=this.name;
if( tdarray[this.name]constructor !== Array){
 tdarray[this.name]=[]
}
          tdarray[this.name].push(tval);