0

我想将相同的对象类型保存在Array()

例如,当我想选择所有复选框并将值保存在数组中时:

selectAllCbs: function() {
            var self = this;
            $('#' + instanceName + 'table_form input[type=checkbox]').each(function(index,cb) {
                if($(cb).prop('disabled') == false) {
                    $(cb).prop('checked',true);
                    console.log("Select all clicked:" + cb); //gives me [object HTMLInputElement] result
                    selected.push(cb); //save to an array
                    self.changeRowStyle(cb);
                }
            });

当我在用户单击行时使用几乎相同的代码时,我得到了不同的类型:

rowClicked: function(id) {
        var cb = $('#' + instanceName + 'cb_' + id);

        if($(cb).is(':checked')) {
            $(cb).prop('checked',false);
            selected.splice(selected.indexOf(this.value),1);
        } else {
            $(cb).prop('checked',true);
            console.log("Row clicked:" + cb); //gives me [object Object]
            selected.push(cb);
        }
        this.changeRowStyle(cb);
    },

所以主要的问题是如何保存[object HTMLInputElement]类型中的rowClicked元素?

因为在第一个示例中,我可以selected[i].value使用第二个示例读取值,我需要使用selected[i][0].value.

4

2 回答 2

1

rowClicked中,替换:

selected.push(cb);

和:

selected.push(cb[0]);

rowClicked在forthis.changeRowStyle(cb[0])方法中做同样的事情

于 2013-08-01T11:17:48.047 回答
1

可能让您感到困惑的是稍后阶段对数组元素的比较。您不能比较两个 JQuery 对象,但可以比较两个 DOM 元素。

JQuery 将所有内容包装为一个 JQuery 对象,以便为它添加所有性感的功能。您在第一批代码中存储的是一个 DOM 元素,因为您没有包装cb在 JQuery 选择器方法中。在第二批代码中,您存储了一个 JQuery 选择器。

为了获取第二批代码的 DOM 元素,只需使用函数get末尾的方法rowClicked

this.changeRowStyle(cb.get(0));

而且,显然,将此函数的推送参数更改为相同:

selected.push(cb.get(0));
于 2013-08-01T11:18:17.267 回答