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

时间:2011-05-12 23:49:08

标签: html firefox input textbox

我发现了我认为是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,它仍然会做同样的事情。

4 个答案:

答案 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(例如<>之间没有有趣的字符),并且在开始标记内没有未转义大于(>)。

    < / LI>

答案 3 :(得分:1)

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

注意:autocomplete属性还控制Firefox是(与其他浏览器不同)是<input>元素,<textarea>元素还是整个<form>的{​​{3}}跨页面加载。持久性功能默认情况下处于启用状态。 autocomplete属性的值设置为off 将禁用此功能。即使自动完成属性由于其类型而通常不适用时,此方法也可以使用。参见persist the dynamic disabled state and (if applicable) dynamic checkedness

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

感兴趣