1

我需要知道如何遍历primefaces p:selectBooleanCheckbox 元素列表并找出它们是否已被检查。我已经找到了如何找到它们,但不知道如何真正得到它们是真还是假,我想知道这里是否有人能够帮助解决这个问题。

在尽可能少的代码中,这是我目前正在做的让实际元素返回给我的方法,我使用了 jquery :checked 以及 .val() 和其他一些方法,但似乎没有一个有效。我还尝试在控制台中筛选元素对象中的代码,寻找任何突出的东西,但我也找不到任何东西。任何帮助将不胜感激。

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
<body>
    <ui:composition template="./../../WEB-INF/template.xhtml">
        <ui:define name="content">
            <div style="margin-bottom: 350px;">
                <p:outputLabel for="coop_sent" value="CO-OP Sent"/>
                <p:selectBooleanCheckbox name="coop_sent" styleClass="pc"     widgetVar="coop_sent" id="coop_sent" value="#{editProjectsBean.pc.co_opSen}"/>

                <script type="text/javascript">
                    for (var propertyName in PrimeFaces.widgets) {
                        if (PrimeFaces.widgets[propertyName] instanceof     PrimeFaces.widget.SelectBooleanCheckbox){
                            if (PrimeFaces.widgets[propertyName].widgetVar ===     'coop_sent') {
                                console.log($('PrimeFaces.widgets[propertyName].widgetVar.coop_sent')); 
                            }
                        }
                    }
                </script>
            </div>
        </ui:define>
    </ui:composition>
</body>
</html>
4

2 回答 2

2

至于具体问题,关联的小部件对象只是一个isChecked()功能。

<p:selectBooleanCheckbox widgetVar="foo" ... />
var checked = PF("foo").isChecked();

另请参阅此博客以了解有关如何探索小部件 var 和所有可用功能的介绍。

至于实际的功能需求,这个问题有点令人困惑和模棱两可,因为您似乎对扫描多个复选框组件感兴趣,但 jQuery 代码片段实际上只对一个感兴趣。我猜您实际上在一次迭代中多次包含此代码片段,但您面临的问题是您最终发现只有一个<p:selectBooleanCheckbox>小部件PrimeFaces.widgets让您提出这个过于笼统的问题。

您应该在小部件变量名称后面加上迭代索引等。

<p:selectBooleanCheckbox widgetVar="foo_#{index}" ... />

一个(更好的)替代方法是只给它们一个通用的样式类,然后遍历 HTML DOM 树。有一个隐藏的<input type="checkbox">,你可以抓住它并检查checked状态。

<p:selectBooleanCheckbox ... styleClass="pc" />
if ($(".ui-chkbox.pc input[type=checkbox]:checked").length) {
    // At least one is checked.
}
于 2015-09-21T07:29:17.587 回答
0

从我尝试过的情况来看,使用这个标签:

<p:selectBooleanCheckbox value="#{Bean.checkbox}" styleClass="test"/>

呈现的html是这样的:

<div id="tableForm:j_id868283402_33c0fe0b" class="ui-chkbox ui-widget test">
    <div class="ui-helper-hidden-accessible">
        <input id="tableForm:j_id868283402_33c0fe0b_input" type="checkbox" name="tableForm:j_id868283402_33c0fe0b_input">
    </div>
    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default ui-state-active">
        <span class="ui-chkbox-icon ui-icon ui-c ui-icon-blank"></span>
    </div>
</div>

切换复选框只会替换标签中的ui-icon-blankto ui-icon-check<span>反之亦然。

styleClass="test"<p:selectBooleanCheckbox>标签中添加了。我认为您可以使用它.test .ui-chkbox-box > span来选择<span>标签并确定其类属性中的值是空白还是选中。

于 2015-09-21T02:08:42.043 回答