【问题标题】:Form retaining values after refresh刷新后表单保留值
【发布时间】:2010-11-04 03:06:25
【问题描述】:

所以我继承了这个遗留的 Rails 代码库,我需要修复一个错误,即即使在页面刷新之后,给定表单仍保留值(尚未保存到数据库)。

用例: 用户在表单中填写数据但没有按提交。 用户单击浏览器上的刷新按钮。 保留表单中的值,而不是刷新整个页面。

我可以从哪里开始寻找任何想法?在我简短的、有限的 Rails 经验中,这不是默认情况下发生的那种事情,所以它必须在某个地方编码?

【问题讨论】:

    标签: ruby-on-rails ruby forms


    【解决方案1】:

    告诉用户按 CTRL+F5

    -- 编辑 如果您不能告诉用户press CTRL+F5(根据我的经验,除非浏览器有错误,或者除非出现问题 else 出错),否则只需 form.reset( )onload 事件中。这会将表单中的字段清除为默认值。但是,如果您在字段中有默认值(例如 ),那么当您触发 .reset() 时,它将重置为默认值。

    【讨论】:

      【解决方案2】:

      有时浏览器会这样做。 (我不是在谈论自动填充下拉菜单,浏览器也会这样做……只是在谈论部分填写、从未提交、然后刷新的表单)。

      通过检查 HTML 源窗口,确保字段中的值实际上来自您的 Rails 应用程序。

      浏览器因先前输入而提供的值不会出现在 VALUE 属性中,但服务器提供的值会出现。

      避免这种情况的一些选项可能是:

      • 使用 POST 将用户发送到表单。因此,任何刷新都会导致“您要重新提交”等。我不认为浏览器会在这种情况下预先填写任何字段(与用户发布然后点击后退按钮)。
      • 使用 onload() 事件清除表单字段值。

      可能有一个更简单的解决方案... Ctrl-F5 有时可以解决问题,但我想我以前也见过这种方法不起作用。

      【讨论】:

        【解决方案3】:

        我也遇到了这个问题,甚至<body onload="myform.reset()"> 也没有用。这尤其是一个问题,因为无论好坏,我都使用隐藏输入作为计数器(例如,跟踪文件上传字段的动态数量)。这些显然需要在重新加载时重置,以防止出现不适用的警告消息。我出于内部目的“修复”了它,放弃了重置按钮以支持链接。而不是<input type="reset"/>,我使用的是<a href=".">Reset</a>(文件名是index.php)。远非优雅,但它适用于我的目的。

        【讨论】:

          猜你喜欢
          • 2011-06-29
          • 1970-01-01
          • 1970-01-01
          • 2015-10-26
          • 2010-11-11
          • 1970-01-01
          • 2021-03-19
          • 1970-01-01
          • 2011-08-23
          相关资源
          最近更新 更多