【问题标题】:How to hide a text field in play framework如何在播放框架中隐藏文本字段
【发布时间】:2016-12-17 03:00:01
【问题描述】:

如何在播放框架中隐藏文本字段?例如如何隐藏该字段:

@inputText(userProfileForm("name"), '_label -> "Name")

【问题讨论】:

    标签: scala playframework


    【解决方案1】:

    这应该适用于所有浏览器:

    @inputText(
        userProfileForm("name"),
        '_label -> "Name",
        'style -> "display: none"
    )
    

    请注意,这只会隐藏字段,而不是标签等。

    如果您还想隐藏标签,则无法使用默认助手执行此操作。 但是,您可以自己指定输入字段:

    <input type="hidden" name="name" value="@userProfileForm.data.get("name")" />
    

    name 应该是表单中字段的名称(在这种情况下,name 也是如此)。
    我还没有测试过value,但它应该可以工作,也许你需要在name 周围去掉"

    如果您这样做,隐藏数据将与表单中的其他数据一起发送到服务器。

    编辑:
    如果隐藏的值是空的,这意味着你在调用视图时没有将它绑定到表单上。您可以在 Java 中将名称绑定到这样的形式(我不知道 Scala,但它已解释为 in the Play Scala documentation):

    Map<String, String> data = new HashMap<>();
    data.put("name","get the username here");
    
    return ok(index.render(userProfileForm.bind(data));
    

    另一个选择(在我看来更简洁)是简单地将用户名作为参数传递给视图。控制器变为:

    return ok(index.render(userProfileForm, "username goes here"));
    

    然后您可以在视图中简单地执行以下操作:

    @(userProfileForm : Form[UserProfileForm])(name : String)
    
    @helper.form(...){
        <input type="hidden" name="name" value="@name" />
        //...
    }
    

    【讨论】:

    • @PrasanthAR 我用一些代码更新了我的帖子,以展示如何隐藏输入(和标签等)并且仍然能够将隐藏的数据发送到服务器。这是你的意思吗?
    • 当然,我真的很感谢你,真的非常感谢...我今天不能向上箭头,因为今天我的投票是空的,我必须投票给 tommarrow 的答案...
    • @PrasanthAR 没问题,如果这解决了您的问题,请不要忘记将答案标记为已接受;)!
    • okthanx... 你使用 html 代码的另一件事 @userProfileForm.data.get("name")" 这可以在那里工作..
    • @PrasanthAR 我现在已经测试了value="@userProfileForm.data.get("name")" 并且它可以工作。如果生成的 HTML 中的值为空,请检查我在答案中的编辑以了解可能导致它的原因。
    【解决方案2】:

    inputText 帮助器采用 (Symbol, Any) 的可变参数,它表示 html 属性。如果您使用的是 html5,则只需添加 hidden 属性:

    @inputText(userProfileForm("name"), '_label -> "Name", 'hidden -> "hidden")
    

    通常hidden 属性没有任何值,但我找不到任何有关如何使用助手执行此操作的信息。至少在 Chrome 中它也是这样工作的。

    编辑

    顺便说一句,你也可以只使用 html 代替 helper:

    <input attribute=value hidden />
    

    【讨论】:

    • 您能否发布此代码为您生成的 html?
    • @inputText(userProfileForm("name"), '_label -> "Name", 'hidden -> "hidden") 此代码正在使用但不起作用
    • 我是新人,所以我对此不太了解,对此我感到非常抱歉,这是我隐藏的全部代码......在视图中......
      @inputText(userProfileForm("name"), '_label -> "Name", 'hidden -> "hidden")@inputText(userProfileForm("status"), '_label -> "Status")字段集>
    • 当您在浏览器中加载页面时,右键单击该页面,然后单击“查看页面源代码”。输入的代码是什么样的?
    【解决方案3】:

    我知道这是一个老问题,但我有一个类似的问题,我想隐藏一个 inputText 并仍然使用助手处理它。 最好和最干净的方法是编写自己的帮助程序,添加一个自定义值来告诉何时隐藏元素本身。 我找到了这样的解决方案

    我自己的字段构造函数

    @(elements: helper.FieldElements)
    @if(elements.args.contains('hideIt)){
        @elements.input
    }else{
    <div class="@if(elements.hasErrors) {error}">
        <div class="input">
            @elements.input
            <span class="errors">@elements.errors.mkString(", ")</span>
            <span class="help">@elements.infos.mkString(", ")</span> 
        </div>
    </div>
    }
    

    我在视图文件中这样使用:

    @inputText(form("fieldName"),
    'hidden -> "true",
    'hideIt -> true
    )
    

    现在你已经完成了:)

    【讨论】:

      【解决方案4】:

      虽然它有效,但我不喜欢 @Aerus 提供的 hashmap 版本,我更喜欢尽可能使用静态类型的表单,所以我想出了一个替代方案。

      final UserProfileForm initial = new UserProfileForm("get the username here");
      return ok(index.render(Form.form(UserProfileForm.class).fill(initial));
      

      然后,在配置文件中,您可以执行以下操作:

      <input type="hidden" name="name" value="@userProfileForm("name").value" />
      

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签