【问题标题】:Play 2.0 generate hidden field without div wrapper玩 2.0 生成隐藏字段没有 div 包装
【发布时间】:2012-06-30 11:39:15
【问题描述】:

正在生成一个像这样的隐藏字段:

@helper.input(_form("userID"), '_label-> None) { (id, name, value, args) =>
  <input type="hidden" name="@name" id="@id" value="@value" @toHtmlArgs(args)>
}

除了创建了 div 包装块元素这一事实之外,这很好用,这会在表单中创建视觉空白空间,看起来不太好——如何在没有 div 包装的情况下使隐藏的输入元素显示?

我知道我可以 jQuery 隐藏父 div 包装器,但我不想一开始就生成它。

【问题讨论】:

    标签: java scala field playframework-2.0 hidden


    【解决方案1】:

    在这种情况下,您不需要使用 @helper.input。试试这个:

    @defining(_form("userID")) { uidField =>
      <input type="hidden" name="@uidField.name" id="@uidField.id" value="@uidField.value">
    }
    

    【讨论】:

      【解决方案2】:

      虽然问题已经得到解答,但我想举一个完整的例子,因为这对我有很大帮助。

      您可以在名为“app/views/helper/inputHidden.scala.html”的文件中定义自己的隐藏输入助手,该文件如下所示:

      @**
      * Generate a hidden HTML input.
      *
      * Example:
      * {{{
      *   @inputHidden(field = myForm("name"), args = 'data-ref -> 0)
      * }}}
      *
      * @param field The form field.
      * @param args Set of extra attributes.
      * @param handler The field constructor.
      *@
      @(field: play.api.data.Field, args: (Symbol,Any)*)(implicit handler: FieldConstructor, lang: play.api.i18n.Lang)
      
      @id = @{ args.toMap.get('id).map(_.toString).getOrElse(field.id) }
      @inputType = @{ args.toMap.get('type).map(_.toString).getOrElse("hidden") }
      @htmlArgs = @{ args.filter(arg => !arg._1.name.startsWith("_") && arg._1 != 'id).toMap.filter(_._1 != 'type) }
      
      <input type="@inputType" id="@id" name="@field.name" value="@field.value" @toHtmlArgs(htmlArgs)>
      

      这允许您在所有视图中重用代码,并将data-ref="..." 等附加参数提供给隐藏字段。

      【讨论】:

        【解决方案3】:

        好的,也可以这样做:

        <input type="hidden" name="foo" value="@{_form("foo").value.map(x=>x).getOrElse("")}">
        

        【讨论】:

          【解决方案4】:

          在某些情况下使用原始 html 作为先前答案的建议效果很好,但不要忘记隐藏的输入可能需要验证(例如,如果它填充了 JavaScript 以回复某些用户交互,就像某些日期选择器一样)。如果您在该字段上有验证错误,则提交将失败,但不会有任何视觉队列说明原因。

          您可以编写额外的 html 来显示隐藏字段的错误,但如果 error 类不存在,我实际上会坚持使用 @helper.input 并使用 css 隐藏输入。您不需要 javascript 来执行此操作。

          【讨论】:

          • +1 有趣的角落案例。在此处使用 jquery 验证插件,日期和时间选择器没有您所描述的问题,但我可以看到隐藏字段验证失败对用户来说是多么令人困惑,没有说明为什么表单不会提交.
          猜你喜欢
          • 2013-04-29
          • 2021-10-25
          • 1970-01-01
          • 2011-07-06
          • 1970-01-01
          • 2018-01-27
          • 2020-02-22
          • 2015-01-26
          • 1970-01-01
          相关资源
          最近更新 更多