代码之家  ›  专栏  ›  技术社区  ›  anako

如何将表单字段绑定到play framework中的特定提交按钮?(邮寄申请表)

  •  1
  • anako  · 技术社区  · 7 年前

    基本上,我希望在我的视图html模板中有两个按钮,并根据单击的按钮来评估我表单中的Int参数,以满足POST请求。

    比如,如果点击了button-number-1,我希望我的numParam是1

    如果点击按钮2,我希望我的numParam是2

    控制器代码:

    case class Data(textParam: Option[String], numParam: Option[Int])
    
    val form = Form(
      mapping(
        "textParam" -> optional(text),
        "numParam" -> optional(number)
      )(Data.apply)(Data.unapply)
    

    )

    查看代码:

    @helper.form(helper.CSRF(routes.MyController.display)) {
        @helper.inputText(form("paramA"))
        <input type="submit" value="I want numParam to be 1">
        <input type="submit" value="I want numParam to be 2">
    }
    

    非常感谢您的帮助!

    1 回复  |  直到 7 年前
        1
  •  2
  •   Andrey Tyukin    7 年前

    我不知道这是否可以通过Play直接实现,所以我建议在混合中添加一些客户端JS。

    您可以做什么:

    • 删除 <input type="submit" ...> ,因为它不允许您在提交前修改表单内容
    • 添加两个 <button> 而是s
    • 添加隐藏输入 numValue
    • 使用javascript(在这种情况下: jquery )设置单击其中一个按钮时隐藏输入的值
    • 使用javascript提交表单

    可能会出现以下情况(警告:未经测试):

    @helper.form(helper.CSRF(routes.MyController.display), 'id -> "myForm") {
        @helper.inputText(form("paramA"))
        <button id="submit_numValue1">I want numParam to be 1</button>
        <button id="submit_numValue2">I want numParam to be 2</button>
        <input type="hidden" id="hiddenNumValue" name="numValue" value="0">
    }
    
    <script>
      // add an `onclick` handler to first button
      $('#submit_numValue1').click(function() {
        // set hidden input to '1'
        $('#hiddenNumValue').val("1");
        // submit the form
        $('#myForm').submit();
      });
    
      // add an `onclick` handler to the second button
      $('#submit_numValue2').click(function() {
        // set hidden input to '2'
        $('#hiddenNumValue').val("2");
        // submit the form
        $('#myForm').submit();
      });
    </script>
    

    如上所述,这要求 jquery 作为javascript库在客户端“导入”。

    不能保证这是解决游戏中问题的最惯用方法,但是 this answer 似乎表明这种方法至少并不少见。