【问题标题】:Keep form elements selected after form submit表单提交后保持表单元素被选中
【发布时间】:2015-09-09 15:45:46
【问题描述】:

我有一个包含 5 个元素(三个下拉菜单、日期、文本)的表单。当我单击提交时,所有表单元素都会被重置(下拉列表被分配给第一个值,日期和文本字段变为空白)。

我明白为什么会发生这种情况 - 因为我的页面是重新生成的,静态表单的所有元素都被初始化为它们的默认值。现在,为了保留表单元素的选定值,我需要将它们分配给表单元素。我预计可以通过以下三种方式做到这一点:


选项 1

从视图中,我将选定的值返回给模板。现在在模板生成期间,我使用 django 模板的 for/if 条件(以花括号开头的条件)生成模板选项


选项 2 -- 首选

从视图中,我将选定的值返回给模板,并以某种方式将这些值传递给 javascript。之后,将是使用 getElementById 获取静态表单元素并分配值的问题。但是,我不确定如何将返回的值传递给 javascript。还是我应该在模板本身中编写脚本?


选项 3

使用缓存——最不感兴趣


你有什么建议,我应该怎么做?还有其他更好更好的第四选择吗?提交表单并保留表单值似乎是 Web 开发的重要组成部分。所以,我希望有更好的方法。

编辑:我没有使用 django 的 ModelForm。相反,我使用的是简单的 html 表单并在提交(发布)时调用视图

【问题讨论】:

    标签: javascript html django forms


    【解决方案1】:

    我不完全确定我是否正确理解了您,但听起来您在实施中几乎遗漏了一些东西。确保在视图中初始化表单时,将发布的数据发送到表单。

    def your_form_view(request):
        form = YourForm(request.POST)
    

    根据您存储输入的方式,您只需找到一种为表单提供该日期的好方法。如果你正在使用 ModelForms,你应该像这样实例化你的表单:

    model = YourModel.objects.get(id=123)
    form = YourModelForm(request.POST, instance=model)
    

    如果您不使用 ModelForms,则可以改用 initial 参数提供默认值。

    【讨论】:

    • 哦,其实我没有使用 ModelForm。我只是写了一个简单的 html 表单并使用 post 将其传递给视图。
    • 只要您按照我的第一个示例提供带有request.POST 的表单,这应该不会有什么不同。如果您这样做,提交的值将在每个(中)成功的发布请求后保留。如果您还希望在后续 GET 请求中持续存在,则必须将它们存储在某处并使用 initial 参数提供它们。
    【解决方案2】:

    1.Node.js 服务端脚本:

    const wordx = req.body.input1;
    

    2.2.在你的新html/ejs页面上(注意:这应该是一个新的html/ejs页面):

    <input class="inputAreas" name="input1" id="mainInput" value=<%= wordx %> autofocus required>
    

    3.然后再次在同一页面上,打开一个脚本区域,然后:

      <script type="text/javascript">
        $(document).ready(function(){
          document.getElementById("mainInput").select();
        });
      </script>
    

    我知道你正在使用 Django,但这个解决方案也可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-03-20
      • 2019-01-17
      • 2013-10-06
      • 1970-01-01
      • 2013-08-10
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      相关资源
      最近更新 更多