错误与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>
标签在同一行开始和结束。 如果情况并非如此(即它们可能分成几行),那么用/gs
replace/g
应该会有所帮助(s
修饰符也会使换行符匹配) -
有效的HTML(例如
<
和>
之间没有有趣的字符),并且在开始标记内没有大于(>
)的转义符。