错误与Firefox – 禁用input的属性刷新时不重置

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

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

<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> 

如果您dynamic地禁用文本框,然后刷新页面,则文本框将保持禁用状态,而不是将其重置为未禁用的原始状态。 我已经在IE8和Chrome中尝试了这一点,这些行为和我所期望的一样,当我刷新时,将文本框重置为未禁用。

另一个有趣的信息是,如果input是checkbox而不是文本框,它仍然会执行相同的操作。

这是Firefox的一个“function” ,可以在页面刷新时记住表单input值。 要解决这个问题,只需在包含input的表单上设置autocomplete="off" ,或者直接设置为input。

这会阻止工作的自动完成,并阻止浏览器记住input字段的状态。

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

要处理后退button,请执行此操作(从此处 )

  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); } 

如前所述,您需要将autocomplete="off"添加到您的button。

这里是一个sh + perl片段,用于在HTML文件/模板中的<button> 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>标签在同一行开始和结束。 如果情况并非如此(即它们可能分成几行),那么用/gsreplace/g应该会有所帮助( s修饰符也会使换行符匹配)

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