动态地将值添加到多维关联javascript对象中的动态键

时间:2013-09-02 19:34:00

标签: jquery arrays object

我放弃了搜索!

我想在Javascript中创建一个对象,在表单字段的更改中,使用ID作为第一级填充,并使用名称 - 值对作为第二级。

var ch = {};

    $('.trackchanges').change(function() {
        var id = $(this).parents('form').attr('id');
        var name = $(this).attr('name');
        var value = $(this).val();

        ch[id] = {};
        ch[id][name] = value;
    });

上面的代码不起作用。每次运行代码时,都会重置该值。我认为这与使用某种推送ch.push(key->value)的需要有关。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

示例HTML

此HTML包含两个表单,用于演示JavaScript解决方案(如下所示)不会导致表单之间的更改冲突。

<form>
    <input name="foo" class="trackChanges" />
    <input name="bar" class="trackChanges" />
    <input name="bof" />
    <input type="submit" />
</form>

<form>
    <input name="foo" class="trackChanges" />
    <input name="bar" class="trackChanges" />
    <input name="bof" />
    <input type="submit" />
</form>

JavaScript(使用jQuery)

$(".trackChanges").on("change", function(event) {
    var input = $(this),
        form  = input.parents("form"),
        data  = form.data("changes") || {};

    // log new change
    data[input.attr('name')] = input.val();

    // save changes
    form.data("changes", data);
});

$("form").on("submit", function(event) {
    var data = $(this).data("changes") || {};
    console.log(data);

    // just output the changes for now
    event.preventDefault();
});

jsfiddle demo


我认为这是一个更好的解决方案,因为它使用jQuery.data将更改绑定到每个表单,然后您可以随时调用该信息。

这意味着您不必使用表单的ID进行任何类型的更改跟踪


试图在这里以身作则,所以我将解决这个问题:

  

我认为这与使用某种推送ch.push(key->value)

的需要有关

上述代码的问题与[].push没有任何关系。你的代码中最明显的错误是,每次onchange事件被触发时,你都会运行这段代码

ch[id] = {};

这基本上是对已保存的先前更改的影响。