禁用Firefox自动填充html表单但保持自动完成

时间:2011-02-01 15:16:36

标签: firefox

较新版本的Firefox有一个新的“功能”,可以记住表单中填写的内容,并在刷新时重新填充表单(也许在其他情况下也是如此?)。

问题是我们有一个非常复杂的Web应用程序,它使用了一些ajax和隐藏的表单字段,这些字段永远不会被用户填写,而是通过javascript填充。 由于这个新的“功能”,我们​​在刷新表单时会遇到很多错误,因为这些字段会突然填充无效值。

所以我正在寻找一种方法来关闭此'功能'而不禁用自动完成功能。 (因为这对我们的客户填写的字段很有用)

如果我把

autocomplete='off'

在我的html中,效果被禁用,但这会失去自动完成功能(显然)。 问题是在刷新后填写的字段没有任何用户操作。

7 个答案:

答案 0 :(得分:1)

如果只有一个匹配项,密码管理器将填充用户名和密码,而自动填充本身不会自动填充字段。但是我猜你正在考虑如果你重新加载页面就会得到那种刷新。在这种情况下,字段值将按会话历史记录进行恢复,但您可以通过将页面标记为不可缓存来将其关闭。

答案 1 :(得分:1)

你应该在开始其他javascript / ajax任务之前将这些字段的值设置为空或者使用javascript设置的默认值。

答案 2 :(得分:0)

这是一个浏览器功能 - 无需进入每个客户端浏览器的设置,您无法禁用此功能。

我建议更强大的验证 - 客户端和服务器端。

答案 3 :(得分:0)

加载页面后,在执行任何其他逻辑之前,应强制该值为空:

inputElem.value = '';

答案 4 :(得分:0)

这是我放在一起的jQuery解决方案。

它不会禁用自动填充,而是在浏览器完成后重写字段。

当我做这个时,我正试图打击Chromes自动填充。只是在它自己上面使用.val('')就行不通了,因为它在chromes自动填充功能启动之前触发了它。

var noFiller = $('input[type="text"]');

noFiller.val(' ');
var t=setTimeout(function(){
    noFiller.val('');
},60);//keep increasing this number until it works

答案 5 :(得分:0)

Javascript解决方案(在页面加载或通过Ajax更新时将字段值设置为空)已经被提及。

另一种选择可能是生成字段的ID,并附加随机数字,以便浏览器无法将它们与缓存值匹配,但这可能会搞砸其他事情。

答案 6 :(得分:-1)

自动填充并不是一件新鲜事。每个浏览器都有它。见http://www.w3.org/Submission/web-forms2/#the-autocomplete

自动填充?你确定吗?使用Firebug(Firefox插件)检查输入的值属性。检查你的ajax发布和回复。也许你的ajax正在幕后填充它。

BTW:请求禁用任何外部工具栏。 Firefox / IE / Chrome /等有一些工具栏可以为用户自动填充数据。警告这个。