2012-06-30 51 views
4

上午生成隐藏字段像这样:玩2.0生成隐藏字段而不DIV包装

@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包装,但我想不生成它在第一个地方。

回答

14

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

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

+1,啊,嗯,这是一个很酷的方式,感谢 – virtualeyes

1

好,能做到这一点,以及:

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

虽然问题已经回答了,我想给一个完整的例子,因为这将有很多的帮助了我。

您可以在一个名为“应用程序/视图/帮手/ 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="..."等附加参数。

1

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

您可以编写额外的html来显示隐藏字段的错误,但如果error类不存在,我实际上会坚持使用@helper.input并使用css隐藏输入。你不需要JavaScript来做到这一点。

+0

+1有趣的极端情况。在这里使用jQuery的验证插件,日期和时间选择器没有你所描述的问题,但我可以看到一个隐藏的领域失败验证将是相当困惑的用户,没有迹象表明为什么表单不会提交。 – virtualeyes