示例 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] = {};
这基本上破坏了先前已保存的更改。