4

次のような非表示フィールドを生成しています:

@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ラッパーを非表示にできることは知っていますが、そもそもそれを生成したくありません。

4

4 に答える 4

14

この場合、を使用する必要はありません@helper.input。これを試して:

@defining(_form("userID")) { uidField =>
  <input type="hidden" name="@uidField.name" id="@uidField.id" value="@uidField.value">
}
于 2012-06-30T11:53:42.920 に答える
4

質問はすでに回答済みですが、これは私を大いに助けてくれるので、完全な例を挙げたいと思います。

「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="..."たり、非表示フィールドなどの追加のパラメーターを指定したりできます。

于 2013-02-07T10:36:08.420 に答える
1

OK、これもできます:

<input type="hidden" name="foo" value="@{_form("foo").value.map(x=>x).getOrElse("")}">
于 2012-06-30T11:45:18.547 に答える
1

以前の回答が示唆するように生のhtmlを使用すると、場合によってはうまく機能しますが、非表示の入力には検証が必要になる場合があることを忘れないでください(たとえば、一部の日付ピッカーのように、ユーザーの操作に応じてJavaScriptが入力されている場合)。そのフィールドに検証エラーがある場合、送信は失敗しますが、理由についての視覚的なキューはありません。

非表示フィールドのエラーを表示するために追加のhtmlを作成できますが、クラスが存在しない場合は、実際に@helper.inputはcssを使用して入力を非表示にします。errorあなたはそれをするためにjavascriptを必要としません。

于 2013-09-20T00:31:08.230 に答える