我发现了我认为是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>
如果您disable
动态textbox
然后刷新页面,textbox
将保持禁用状态,而不是重置回原来的未禁用状态。我已经在IE8和Chrome中尝试过这种方式,并且这些操作符合我的预期,在刷新时将textbox
重置为未禁用。
另一个有趣的信息是,如果输入是checkbox
而不是textbox
,它仍然会做同样的事情。
答案 0 :(得分:119)
这是Firefox的&#34;功能&#34; ,可以记住页面刷新时的表单输入值。要解决此问题,只需在包含输入的表单上设置autocomplete="off"
,或直接在输入中设置。{/ p>
这会停止自动完成工作,并阻止浏览器记住输入字段的状态。
或者,你可以只是&#34;硬刷新&#34;单击CTRL + F5。这将完全重置当前页面。
答案 1 :(得分:8)
要处理后退按钮,请执行此操作(来自here)
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);
}
答案 2 :(得分:1)
如前所述,您需要在按钮中添加autocomplete="off"
。
这是一个sh
+ perl
代码段,用于在HTML文件/模板中<button>
的情况下自动执行此操作(在某些假设下):
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
modifier导致.
也匹配换行符)
有效的HTML(例如<
和>
之间没有有趣的字符),并且在开始标记内没有未转义大于(>
)。
答案 3 :(得分:1)
这确实是Firefox中打开的bug。 MDN: autocomplete
中还有一个注释(向下滚动到第二个黄色框):
注意:
autocomplete
属性还控制Firefox是(与其他浏览器不同)是<input>
元素,<textarea>
元素还是整个<form>
的{{3}}跨页面加载。持久性功能默认情况下处于启用状态。 将autocomplete
属性的值设置为off
将禁用此功能。即使自动完成属性由于其类型而通常不适用时,此方法也可以使用。参见persist the dynamic disabled state and (if applicable) dynamic checkedness。
如果您使用的是Bootstrap,您可能会对
感兴趣