0

我放弃寻找!

我想在 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;
    });

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

非常感谢你的帮助。

4

1 回答 1

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 演示


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

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


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

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

上面代码的问题与[].push. 您的代码中最明显的错误是每次onchange触发事件时,您都在运行这段代码

ch[id] = {};

这基本上破坏了先前已保存的更改。

于 2013-09-02T19:43:44.017 回答