尝试创建一个复选框以检查treenode中的所有项目。我是JSF的新手,所以我很难理解如何在树而不是表上实现它。这是当前的代码:
<rich:panel style="width:400px;">
<h:selectBooleanCheckbox id="vehicleAll" onclick="selectAllModel(this.checked);">
</h:selectBooleanCheckbox>
<h:outputText value=" ALL"/>
<rich:tree id="vehicleTree" switchType="client"
value="#{applicationScope.demoModelGrpList}" var="node" ajaxKeys="#{null}"
binding="#{demoRptController.vehicleUiTree}"
nodeSelectListener="#{demoRptController.selectionListener}"
changeExpandListener="#{demoRptController.expansionListener}"
ajaxSubmitSelection="true">
<rich:treeNode id="modelNode" ajaxSingle="true"
icon="/images/pixel_node.gif" iconLeaf="/images/pixel_node.gif">
<h:selectBooleanCheckbox id="cbxNode" value="#{node.selected}" style="position:relative; float:left; left:-22px;" class="vcBx">
</h:selectBooleanCheckbox>
<h:outputText value="#{node.name}" style="position:relative; float:left; left:-16px;"/>
</rich:treeNode>
</rich:tree>
</rich:panel>
脚本是:
<script type="text/javascript">
<![CDATA[
function selectAllModel(checks) {
alert("calling select all");
var array = document.getElementsByTagName("input");
for(var i = 0; i < array.length; i++)
{
if(array[i].type == "checkbox")
{
if(array[i].className == "vcBx")
{
array[i].checked = checks;
}
}
}
}
]]>
</script>
我将警报放在那里进行测试;它甚至没有被召唤。我很确定我的语法正确,所以这让我摸不着头脑。
答案 0 :(得分:0)
为了遇到同样问题的人的利益回答我自己的问题。
显然我不能使用select作为函数名。这解决了一个问题;我只需要重命名该函数,现在它就被调用了。
要解决另一个(未选中复选框),我必须查找treenode生成的特定ID。看到只有一个数字发生了与节点索引有关的变化,我设置了下面指定的循环,逐个选中复选框,并根据ALL复选框的状态进行更改。有点复杂,但这是我发现满足需要做的最好的方式。从我的实验中,通过输入或类型复选框选择似乎不适用于抓取h:selectBooleanCheckbox。如果我错了,请随时纠正我。
或者,您可以使用indexOf使用节点的id,但我只需要选择父节点而不需要子节点,因为这样做也选择了所有子节点。
function ccAllModel(checks) {
for (var i = 0; i < 9; i++) {
var vehicleId = "demoRptForm:vehicleTree:" + i + "::cbxNode";
var array = document.getElementById(vehicleId);
array.checked = checks.checked;
}
}