我放弃了搜索!
我想在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)
的需要有关。
非常感谢你的帮助。
答案 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();
});
我认为这是一个更好的解决方案,因为它使用jQuery.data
将更改绑定到每个表单,然后您可以随时调用该信息。
这意味着您不必使用表单的ID进行任何类型的更改跟踪
试图在这里以身作则,所以我将解决这个问题:
我认为这与使用某种推送
的需要有关ch.push(key->value)
上述代码的问题与[].push
没有任何关系。你的代码中最明显的错误是,每次onchange
事件被触发时,你都会运行这段代码
ch[id] = {};
这基本上是对已保存的先前更改的影响。