缺少:属性id后 - javascript

时间:2012-01-19 21:13:31

标签: javascript jquery

我认为这是一个简单的功能,但我无法弄清楚我在这里缺少什么。我得到的错误是missing : after property id,它引用了:

var data = { "'" + $(this).attr('id') + "'" : "'" + $(this).val() + "'" };

这是功能:

function ArrayPush($group) {
    var arr = new Array();
    $group.find('input[type=text],textarea').each(function () {
        var data = { "'" + $(this).attr('id') + "'" : "'" + $(this).val() + "'" };
        arr.push(data);
    });
    return arr;
}

5 个答案:

答案 0 :(得分:9)

您不能创建这样的对象 - 对象文字中的“键”必须是常量,而不是变量或表达式。

如果键是变量,则需要类似于数组的语法:

myArray[key] = value;

因此你需要:

var data = {};  // empty object
data[$(this).attr('id')] = $(this).val();

但是,由于所有字段实际上都是普通的HTMLInputElementHTMLTextAreaElement对象,因此您应该使用它并避免那些昂贵的jQuery调用:

var data = {};  // empty object
data[this.id] = this.value;

我还要问你为什么要创建一个对象数组 - 因为键应该都是唯一的,我通常希望返回一个对象:

function formObjectBuild($group) {
    var obj = {};
    $group.find('input[type=text],textarea').each(function () {
        obj[this.id] = this.value;
    });
    return obj;
}

答案 1 :(得分:1)

您无法像这样动态构建属性名称。

function ArrayPush($group) {
    var arr = new Array();
    $group.find('input[type=text],textarea').each(function () {
        var data = {};
        data [$(this).attr('id')] = $(this).val();
        arr.push(data);
    });
    return arr;
}

答案 2 :(得分:1)

var data = {};
data[$(this).attr('id')] = $(this).val();

改用它。否则你会尝试做某种评估...

答案 3 :(得分:1)

尝试将其更改为。

var data = {};
data[$(this).attr('id')] = $(this).val();

答案 4 :(得分:-1)

试试这个:

function ArrayPush($group) {
    var arr = new Array();
    $group.find('input[type=text],textarea').each(function () {
        arr[$(this).attr('id')] = $(this).val();
    });
    return arr;
}