我需要知道如何遍历素面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>
对于具体问题,关联的小部件对象只有一个isChecked()
函数。
<p:selectBooleanCheckbox widgetVar="foo" ... />
var checked = PF("foo").isChecked();
关于如何探索小部件var和所有可用函数的介绍,请参阅本博客。
至于实际的功能需求,这个问题有点令人困惑和模糊,因为您似乎对扫描多个复选框组件感兴趣,但jQuery代码片段实际上只对一个感兴趣。我猜你实际上在迭代中多次包含这个代码片段,但是你面临的问题是,你最终在PrimeFaces.widgets
中只发现了一个<p:selectBooleanCheckbox>
小部件,这使你问这个过于通用的问题。
你应该在小部件变量名后面加上迭代索引之类的后缀。
<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.
}
从我尝试过的,使用这个标签:
<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>
切换复选框只会将<span>
标签中的ui-icon-blank
替换为ui-icon-check
,反之亦然。
我在<p:selectBooleanCheckbox>
标签中添加了styleClass="test"
。我认为你可以使用这个.test .ui-chkbox-box > span
来选择<span>
标签,并确定其class属性中的值,无论它是空白的还是选中的