使用JavaScript获取widgetVar或选中/取消选中所有其他PrimeFaces复选框

我在页面上有几个PrimeFaces复选框。 如果单击主复选框,则应选中/取消选中所有其他复选框。 使用纯HTML复选框,这将是一个简单的问题。 但由于PrimeFaces不显示复选框本身,而是显示图像,因此以下JavaScript代码不起作用:

 $(document).ready(function() { var masterCheckbox = $(".ui-chkbox.master :checkbox"); var slaveCheckboxes = $(".ui-chkbox:not(.master) :checkbox"); updateMaster(); masterCheckbox.change(updateSlaves); slaveCheckboxes.change(updateMaster); function updateMaster() { var allSlavesChecked = true; slaveCheckboxes.each(function() { if (!$(this).is(':checked')) { allSlavesChecked = false; } }); masterCheckbox.attr("checked", allSlavesChecked); } function updateSlaves() { var masterChecked = masterCheckbox.is(":checked"); slaveCheckboxes.each(function() { $(this).attr("checked", masterChecked); }); } });  

我知道我可以使用PrimeFaces widgetVar切换复选框,但我不知道如何使用JavaScript获取PrimeFaces小部件对象。 我认为RichFaces将组件属性添加到DOM元素,但PrimeFaces没有。 有人知道这个问题的解决方案吗?

你是对的 – 如果你像这样创建你的组件:

  

您可以通过引用其widgetVar来访问该复选框,在这种情况下,调用PrimeFaces客户端API将其标记为已选中:

  

然后,您可以将主复选框的onchange事件绑定到javascript方法,该方法根据主复选框的状态检查或取消选中所有“从属”复选框的状态(建议您将状态存储在隐藏字段中)。

注意,它可能使您的生活更容易处理“更改”ajax事件并在服务器端实现检查/取消选中逻辑。 只需确保在p:ajax组件的update属性中提供所有slave复选框的所有id: