【问题标题】:playframework, input disabled breaks play from passing the value?playframework,输入禁用中断播放传递值?
【发布时间】:2012-02-08 03:33:07
【问题描述】:

我有一个从以前的表单填写的输入字段(因此在第二页上将输入设置为禁用),然后我们收到 null 的值。这有效:

<input type="text" class="boxtpl" name="${field.name}" value="${user?.email}">

但这不是:

<input type="text" class="boxtpl" name="${field.name}" value="${user?.email}" disabled="disabled">

这似乎破坏了框架有什么原因吗?

【问题讨论】:

    标签: html forms playframework


    【解决方案1】:

    禁用的控件不应该实际上与表单一起提交,所以您所看到的实际上是正常行为。根据HTML form specification

    设置后,disabled 属性对元素有以下影响:

    • 禁用的控件不会获得焦点。
    • 在标签导航中跳过禁用的控件。
    • 禁用的控件无法成功。

    successful的定义见in the same document。建议因此而破坏 Play 有点荒谬。

    如果您希望用户无法编辑的表单字段在提交表单时仍应发送,您可以使用read-only 属性,或使用 JavaScript 禁止用户输入。

    更新:正如 cmets 中指出的,以下几点也可能提供解决方案:

    • Play 可能仍将禁用控件的表单值保留在请求对象中,只是不绑定它们(因此您可以在需要时从请求中检索它们)
    • 使用隐藏字段来保留表单值,以防您仍想提交值,但不希望用户看到控件

    【讨论】:

    • 另一种选择是使用第二个隐藏字段来包含数据。此外,您可能会发现 play 在 params 对象请求中仍然有它,但没有绑定它。
    • @grahamrb 哦,它仍然保留在请求中?不知道,好电话。
    • @tmbrggmn 隐藏字段选项是最好的选择,更有弹性
    • @PereVillega 我同意,条件是 OP 实际上不想显示此字段。我怀疑他可能仍想在表单中显示输入字段,但不允许对其进行任何更改。
    • @tmbrggmn 然后他可以将其显示为文本标签,比禁用的输入更整洁:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    相关资源
    最近更新 更多