Firefox的错误-刷新时输入的禁用属性未重置


103

我发现我认为是Firefox的错误,并且我想知道这是否真的是错误,以及任何解决方法。

如果使用以下来源创建基本网页:

<html>
  <head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
  </head>
  <body>
    <div>
      <input id="txtTest" type="text" />
      <input type="button" onclick="$('#txtTest').attr('disabled','disabled');" value="Set Disabled (jQuery)" />
      <input type="button" onclick="document.getElementById('txtTest').disabled = true;" value="Set Disabled (js)" />
      <input type="button" onclick="$('#txtTest').removeAttr('disabled');" value="Remove Disabled" />
    </div>
  </body>
</html>

如果您disabletextbox动态再刷新页面时,textbox将保持禁用,而不是重新回到原来的未禁用的状态。我已经在IE8和Chrome浏览器中进行了尝试,它们的行为与我预期的一样,textbox刷新后将其重置为未禁用。

另一个有趣的信息是,如果输入是a checkbox而不是a ,它仍然会执行相同的操作textbox


2
您确定不只是Firefox的“功能”可以input在您简单地刷新时记住元素的状态吗?
2011年

@thirtydot:我也想知道这一点,所以我还尝试了动态设置“ size”属性的尝试,并且确实会在刷新时重置,就像所有其他浏览器一样。因此,到目前为止,看来我发现Firefox将保留Disabled属性以及输入的实际值,但不会保留大小...
Stephen Mesa

5
哇,你是对的!我在输入上设置了autocomplete =“ off”,这种情况不再发生。Firefox默认情况下将其打开非常不便!
Stephen Mesa

3
是的,我忘记了您可以使用禁用它autocomplete="off"这篇博文对我来说似乎很熟悉,因此我之前肯定会遇到过。您应该为自己的问题写一个答案(或者我应该吗?)
2011年

1
有一份关于此的Mozilla错误报告:bugzilla.mozilla.org/show_bug.cgi?
id=654072

Answers:


126

这是Firefox 的“功能”,它可以记住页面刷新时的表单输入值。要解决此问题,您只需autocomplete="off"在包含输入的表单上进行设置,或者直接在输入上进行设置。

这将停止自动完成功能,并阻止浏览器记住输入字段的状态。

或者,您可以通过单击CTRL + F5来“硬刷新”。这将完全重置当前页面。


4
当用户单击“后退”按钮时,我只是遇到了这个问题,autocomplete="off"在这种情况下似乎不起作用。
solarc 2012年

1
我不想要表单,我只有一个按钮,而Firefox“记住”它已禁用..烦人。我可以通过JS重置它,但是.ugly。
vsync

@vsync尝试在按钮/输入元素上进行设置。应该也可以!
Henrik Heimbuerger

4
您甚至必须在按钮上执行此操作。我很难相信这是一个功能而不是错误?
利亚姆2014年

1
这也影响了隐藏的输入也
利亚姆

10

要处理后退按钮,请执行此操作(从此处开始

    window.addEventListener('pageshow', PageShowHandler, false);
    window.addEventListener('unload', UnloadHandler, false);

    function PageShowHandler() {
        window.addEventListener('unload', UnloadHandler, false);
    }

    function UnloadHandler() {
        //enable button here
        window.removeEventListener('unload', UnloadHandler, false);
    }

我不知道为什么这个答案只有一个赞成票,而另一个答案只有99票。在卸载时恢复禁用状态比禁用自动完成更好,因为自动完成是一种理想的功能。
尼克

我认为这//enable button here是多余的;我对所引用文档的理解是,事件监听器的存在只会阻止页面存储在BFcache中。
myf

请注意,在Firefox中添加卸载处理程序还有其他副作用:developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/1.5/…–
robocat

2

如前所述,您需要添加autocomplete="off"按钮。

这是一个sh+ perl代码段,用于<button>在HTML文件/模板中使用s 的情况下自动执行此操作(在某些假设下):

find /path/to/html/templates -type f -name '*.html' -exec perl -pi -e \
  's/(?<=<button )(.*?)(?=>)/@{[(index($1,"autocomplete=")!=-1?"$1":"$1 autocomplete=\"off\"")]}/g' \
  {} +

假设是:

  • 开头<button>标签在同一行上开始和结束。如果不是这种情况(即它们可能分成几行),则替换/g/gs应该会有所帮助(s修饰符.也会导致换行符匹配)

  • 有效的HTML(例如<和之间没有有趣的字符>),并且>在开始标记内没有大于()的未转义。


0

这确实是Firefox中的一个开放错误MDN中autocomplete还有一个注释:(向下滚动到第二个黄色框):

注:该autocomplete属性也控制是否Firefox会-不像其他的浏览器- 坚持动态禁用状态及(如适用)动态checkedness一个的<input>元素,<textarea>元素,或整个<form>跨页的负荷。持久性功能默认情况下处于启用状态。autocomplete属性的值设置为off禁用此功能。即使自动完成属性由于其类型而通常不适用时,此方法也可以使用。参见错误654072

如果您使用的是Bootstrap,则可能对

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.