2013-07-04 48 views
0

試圖創建一個複選框來檢查treenode中的所有項目。我對JSF很陌生,所以我非常難以理解如何在樹而不是表上實現它。這是當前的代碼:爲Richfaces選中全部框Treenode

<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

只需使用jquery或javascript爲此。讓樹中的所有複選框都具有styleClass = foo,在主複選框的onclick上,調用一個javascript函數,用於選擇所有輸入元素類型複選框class = foo具有與主複選框相同的選定/取消選擇的值 –

+0

Doesn' t似乎在我的情況下工作,嘗試做類似的事情:var inputs = document.getElementsByTagName('input'); for(var i = 0; i

+0

這是一個簡單的問題,使用jQuery來選擇複選框,Stackoverflow已經提供了很多答案,請研究。這是一個有前途的答案乍一看http://stackoverflow.com/questions/14925874/checking-all-checkboxes-jquery –

回答

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; 
    } 
} 
相關問題