检测更改的表单值——Firefox 替换为用户输入值,破坏脏污检测

Posted

技术标签:

【中文标题】检测更改的表单值——Firefox 替换为用户输入值,破坏脏污检测【英文标题】:Detecting changed form values -- Firefox replaces with user-input values, breaking dirtiness detection 【发布时间】:2011-01-19 11:21:40 【问题描述】:

我正在为 Web 应用程序实现表单脏污检测。我感兴趣的“肮脏”是服务器的价值与表单上显示的内容。服务器正在运行 Django,我们的大部分脚本都在 jQuery 中。

我们为表单字段提供与服务器上的值相对应的正确默认值,例如

<input name="foo" type="text" value="this is the saved value" id="id_foo" />

标准答案是遍历表单输入并保存它们的初始值以供以后在加载时进行比较。

这在大多数情况下都有效,但 Firefox 有时会忽略提供的值,而是将其替换为用户的最后输入,从而打破了这一点。因此,例如:我们提供表单,用户修改它(“现在它很脏”),然后刷新; Firefox 将值替换为用户的最后输入。

这会破坏检测脏污的脚本,因为它的初始值不是服务器提供的值,而是用户在刷新前输入的值。此时脚本无法访问原始值。

其他开发人员如何解决这个问题?现在我提供了一个带有 real 原始值的隐藏跨度,但感觉非常hacky:

<input name="foo" type="text" value="this is the saved value" id="id_foo" />
<span class="original-value" id="id_foo_orig">this is the saved value</span>

有什么方法可以禁用 Firefox 中输入的这种行为吗? (IE 和 Chrome 至少不这样做) 我在这里遗漏了一些基本的东西吗?

谢谢, 罗伯特

【问题讨论】:

【参考方案1】:

在表单中添加autocomplete="off" 属性以禁用字段的自动完成(如果可以的话)。这是文档 - https://developer.mozilla.org/en/How_to_Turn_Off_Form_Autocompletion

【讨论】:

就是这样,谢谢!我现在设置表单的自动完成=“关闭”,然后在收集初始值后重新打开它,它可以正常工作。 不错的车坦!我猜这种行为是为 FF 设计的,可能适合一整类场景,但我不喜欢它!

以上是关于检测更改的表单值——Firefox 替换为用户输入值,破坏脏污检测的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 检测表单输入的自动完成

从输入类型日期中删除“X”(清除按钮)并更改 Firefox 中的字体系列

检测值已返回到低于阈值,然后允许更改值

如何根据用户输入动态更改 django 中的表单(提交前)

表单组值更改时不会触发更改检测

我如何知道表单输入已更改?