从未选中的复选框中获取价值

Posted

技术标签:

【中文标题】从未选中的复选框中获取价值【英文标题】:Get value from unchecked checkbox in play 【发布时间】:2013-03-21 23:54:17 【问题描述】:

我需要使用 Play 框架获取未选中复选框的值。如果我选中复选框,我可以获得值。

我的html如下

   <input type="checkbox" name="correctAnswer" value="true">

这就是我在控制器中获取数据的方式,它给了我一个只有选中框的数组

  String[] segaMega = request().body().asFormUrlEncoded().get("correctAnswer");

我曾尝试在复选框技巧之前执行隐藏字段,但效果不佳。 play有什么可以帮助我的吗?

【问题讨论】:

这不是 Play Framework 的问题,而是 HTML 设计的问题。默认情况下,表单不会提交未选中复选框的值。如果您想传递 all 复选框中的值(即使是未选中的),您应该在请求中添加一个新参数,您可以使用隐藏字段来执行此操作(正如您已经尝试过的那样)或 使用 javascript/jQuery 从复选框中获取所有值并将它们作为新参数传递。这仍然是一个坏主意,您真正的功能需求是什么? 好的,这是您对需求的高级定义。看起来您需要在隐藏字段或其他任何地方处理复选框的值。 【参考方案1】:

根据您的评论,您确实需要在服务器端同时拥有已检查的值和完整的值列表。最好的办法是在表单中有一个隐藏字段,它将保存由分隔符连接的复选框的值。在本例中,我将使用管道 (|)。

<script type="text/javascript">
    function beforeSubmitQuestion() 
        var hidden = document.getElementById("hidChxValues");
        hidden.value = "";
        var checkboxes = document.getElementsByName("correctAnswer");
        for(var i = 0; i < checkboxes.length; i++) 
            hidden.value += checkboxes[i].value + "|";
        
        return false;
    ;
</script>

<form id="yourForm" onsubmit="beforeSubmitQuestion(); ">
    <input type="hidden" id="hidChxValues" />

    <input type="checkbox" name="correctAnswer" value="true" /> Valid
    <br />
    <input type="checkbox" name="correctAnswer" value="false" /> Invalid
    <br />
    <input type="submit" />
</form>

我已经在 jsfiddle 中进行了测试:http://jsfiddle.net/tdDbg/ 除了我使用type="text" 而不是type="hidden" 以查看连接值并在onsubmit 的末尾添加return false; 到避免向服务器提交表单(这将返回错误)。

可以使用 Play 或其他技术(甚至是普通的 Servlet)来处理服务器端代码。

【讨论】:

以上是关于从未选中的复选框中获取价值的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在高级 PDF 中打印复选框? (我的意思是复选框本身不是它的价值)

如何从复选框更改复选框的属性?

JS如何获取表单中复选框的值?

获取数组中所有选中的复选框

如何在jquery中获取选中复选框的ID

如何在angularjs中获取选中的复选框