我目前有以下 JavaScript 来检测表单中的更改。
form.addEventListener("input", function () {
ChangesMade = true;
console.log("Change");
});
我现在需要包括在对 Controller 的调用中是否进行了更改,这意味着该值不能再存储在 JavaScript 中,因为这是客户端。
最佳答案
您有几个选择...
1. 使用模型的两个实例构建 View 模型。一个是“原始”实例,一个是“更改”实例。将“原始”字段绑定(bind)到表单中的隐藏输入,并将“更改”字段绑定(bind)到普通表单元素。
然后,当表单发布到服务器时, Controller 操作的输入将有两个实例进行比较。如果“更改”值与“原始”值不同,则用户更改了某些内容。
请注意,但是用户仍然可以更改隐藏的输入(如果他们愿意)。这不是一种安全措施,但如果“安全”不是这里的问题,则可能是一种有效的措施。
2. 保持 View 和 Controller 交互不变,但是当数据发布到 Controller 时,您将使用该记录中的标识符从数据库中获取原始数据。
使用发布的模型和数据库获取的模型,比较两者。如果值不同,则用户更改了某些内容。
请注意但是,这不包括竞争条件。由于此模型最初是向此用户显示的,因此另一个用户可能更改了数据库值。您可以通过添加数据更改时间的时间戳来解决此问题,但这可能不足以告诉您更改了哪些数据,除非您保留旧记录的审核副本。其复杂性迅速升级。
<小时/>这是两种选择之间的权衡,其中一种可以满足系统的实际需求,但缺点可以接受。
关于javascript - 不使用 javascript 检查表单数据的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47675911/