2012-05-12 8 views
0

行をクリックしたJSF表があります。選択ボックスをクリックすると、新しいページが開きます。選択肢から除外する列Selectをどのように変更できますか。新しいページを開くときに最初の列を除外します

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"  
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <h:head> 
     <ui:insert name="header">   
      <ui:include src="header.xhtml"/>   
     </ui:insert> 
     <script type="text/javascript"> 
      function addOnclickToDatatableRows() { 
       //gets all the generated rows in the html table 
       var trs = document.getElementById('form:dataTable').getElementsByTagName('tbody')[0] 
       .getElementsByTagName('tr'); 
       //on every row, add onclick function (this is what you're looking for) 
       for (var i = 0; trs.length > i; i++) { 
        trs[i].onclick = new Function("rowOnclick(this)"); 
       } 
      } 

      function rowOnclick(tr) { 
       var elements = tr.cells[0].childNodes; 
       for(var i = 0; elements.length > i; i++) { 
        if ((typeof elements[i].id !== "undefined") &amp;&amp; 
        (elements[i].id.indexOf("lnkHidden") > -1)) { 
         //opne in a new window// window.open(elements[i].href); 
         location.href=elements[i].href 
         break; 
        } 
       } 
       return false; 
      } 
     </script> 
    </h:head> 
    <h:body onload="addOnclickToDatatableRows();"> 
     <!-- Demo click on row --> 
     <h1><img src="resources/css/images/icon.png" alt="DX-57" /> History Center</h1> 
     <!-- layer for black background of the buttons --> 
     <div id="toolbar" style="margin: 0 auto; width:1180px; height:30px; position:relative; background-color:black"> 
      <!-- Include page Navigation --> 
      <ui:insert name="Navigation">   
       <ui:include src="Navigation.xhtml"/>   
      </ui:insert> 

     </div> 

     <div id="logodiv" style="position:relative; top:35px; left:0px;"> 
      <h:graphicImage alt="Demo Click on row" style="position:relative; top:-20px; left:9px;" value="" /> 
     </div> 
     <div id="main" style="margin: 0 auto; width:1190px; height:700px; position:absolute; background-color:transparent; top:105px"> 

      <div id="mainpage" style="margin: 0 auto; width:1190px; height:500px; position:absolute; background-color:transparent; top:80px"> 

       <div id="settingsHashMap" style="width:750px; height:400px; position:absolute; background-color:r; top:20px; left:1px"> 

        <h:form id="form"> 

         <ui:debug /> 

         <!-- The sortable data table --> 
         <h:dataTable id="dataTable" value="#{SessionsController.dataList}" binding="#{table}" var="item"> 
          <!-- Check box --> 
          <h:column> 
           <f:facet name="header"> 
            <h:outputText value="Select" /> 
           </f:facet> 
           <h:selectBooleanCheckbox onclick="highlight(this)" value="#{SessionsController.selectedIds[dataItem.id]}" /> 
           <!-- Click on table code --> 
           <h:outputLink id="lnkHidden" value="AnotherPage.xhtml" 
               style="display:none"> 
            <f:param name="id" value="#{item.aSessionID}" /> 
           </h:outputLink> 
          </h:column> 
          <h:column> 
           <f:facet name="header"> 
            <h:commandLink value="№" actionListener="#{SessionsController.sort}"> 
             <f:attribute name="№" value="№" /> 
            </h:commandLink> 
           </f:facet> 
           <h:outputText value="#{table.rowIndex + SessionsController.firstRow + 1}" /> 
          </h:column> 
          <h:column> 
           <f:facet name="header"> 
            <h:commandLink value="Account Session ID" actionListener="#{SessionsController.sort}"> 
             <f:attribute name="sortField" value="Account Session ID" /> 
            </h:commandLink> 
           </f:facet> 
           <h:outputText value="#{item.aSessionID}" /> 
          </h:column> 
          <h:column> 
           <f:facet name="header"> 
            <h:commandLink value="User ID" actionListener="#{SessionsController.sort}"> 
             <f:attribute name="sortField" value="User ID" /> 
            </h:commandLink> 
           </f:facet> 
           <h:outputText value="#{item.userID}" /> 
          </h:column> 
          <h:column> 
           <f:facet name="header"> 
            <h:commandLink value="Activity Start Time" actionListener="#{SessionsController.sort}"> 
             <f:attribute name="sortField" value="Activity Start Time" /> 
            </h:commandLink> 
           </f:facet> 
           <h:outputText value="#{item.activityStart}" /> 
          </h:column> 
          <h:column> 
           <f:facet name="header"> 
            <h:commandLink value="Activity End Time" actionListener="#{SessionsController.sort}"> 
             <f:attribute name="sortField" value="Activity End Time" /> 
            </h:commandLink> 
           </f:facet> 
           <h:outputText value="#{item.activityEnd}" /> 
          </h:column> 
          <h:column> 
           <f:facet name="header"> 
            <h:commandLink value="Activity" actionListener="#{SessionsController.sort}"> 
             <f:attribute name="sortField" value="Activity" /> 
            </h:commandLink> 
           </f:facet> 
           <h:outputText value="#{item.activity}" /> 
          </h:column> 
         </h:dataTable> 

         <!-- The paging buttons --> 
         <h:commandButton value="first" action="#{SessionsController.pageFirst}" 
             disabled="#{SessionsController.firstRow == 0}" > 
          <f:ajax render="@form" execute="@form"></f:ajax> 
         </h:commandButton> 


         <h:commandButton value="prev" action="#{SessionsController.pagePrevious}" 
             disabled="#{SessionsController.firstRow == 0}" > 
          <f:ajax render="@form" execute="@form"></f:ajax> 
         </h:commandButton> 

         <h:commandButton value="next" action="#{SessionsController.pageNext}" 
             disabled="#{SessionsController.firstRow + SessionsController.rowsPerPage >= SessionsController.totalRows}" > 
          <f:ajax render="@form" execute="@form"></f:ajax> 
         </h:commandButton>  

         <h:commandButton value="last" action="#{SessionsController.pageLast}" 
             disabled="#{SessionsController.firstRow + SessionsController.rowsPerPage >= SessionsController.totalRows}" > 
          <f:ajax render="@form" execute="@form"></f:ajax> 
         </h:commandButton> 

         <h:outputText value="Page #{SessionsController.currentPage}/#{SessionsController.totalPages}" /> 
         <br /> 

         <!-- The paging links --> 
         <ui:repeat value="#{SessionsController.pages}" var="page"> 
          <h:commandLink value="#{page}" actionListener="#{SessionsController.page}" 
              rendered="#{page != SessionsController.currentPage}" > 
           <f:ajax render="@form" execute="@form"></f:ajax> 
          </h:commandLink> 
          <h:outputText value="#{page}" escape="false" 
              rendered="#{page == SessionsController.currentPage}" /> 
         </ui:repeat> 
         <br /> 

         <!-- Set rows per page --> 
         <h:outputLabel for="rowsPerPage" value="Rows per page" /> 
         <h:inputText id="rowsPerPage" value="#{SessionsController.rowsPerPage}" size="3" maxlength="3" /> 
         <h:commandButton value="Set" action="#{SessionsController.pageFirst}" > 
          <f:ajax render="@form" execute="@form"></f:ajax> 
         </h:commandButton> 
         <h:message for="rowsPerPage" errorStyle="color: red;" /> 

        </h:form>     

       </div> 

       <div id="settingsdivb" style="width:350px; height:400px; position:absolute; background-color:transparent; top:20px; left:800px"> 

       </div> 
      </div> 
     </div> 

     <script type="text/javascript"> 
      $("tr").not(':first').hover(
      function() { 
       $(this).css("background","#707070"); 
      }, 
      function() { 
       $(this).css("background",""); 
      } 
     );    

      function highlight(param) { 
       var row = jQuery(param).parent().parent().children(); 
       row.toggleClass('highlited'); 
      }   
     </script> 


    </h:body> 
</html> 

答えて

2

あなたが求めているものが得られたことを期待して、ちょうど愚かな答え。

なぜあなただ​​けの

for (var i = 1; trs.length > i; i++) { 
     trs[i].onclick = new Function("rowOnclick(this)"); 
    } 

for (var i = 0; trs.length > i; i++) { 
    trs[i].onclick = new Function("rowOnclick(this)"); 
} 

を変更しないでください?

ループを1から開始するには、最初のループにバインドするのを避けて、2番目の行からonClick関数を割り当てる必要があります。

EDIT:

私は提供されたHTMLを使用して、このスクリプトをテストしてみたし、動作しているようです。 チェックボックスをクリックするとリダイレクトは開始されず、他の列をクリックするとリダイレクトが開始されます。

あなたのページでテストしてお知らせください!

<script type="text/javascript"> 
     <!-- http://stackoverflow.com/questions/10566980/modify-javascript-to-exclude-first-column-from-opening-new-page --> 

     function addOnclickToDatatableRows() { 
      //gets all the generated rows in the html table 
      var trs = document.getElementById('form:dataTable').getElementsByTagName('tbody')[0] 
      .getElementsByTagName('tr'); 
      //on every row, add onclick function (this is what you're looking for) 
      for (var i = 0; trs.length > i; i++) { 
       var cells = trs[i].cells;      
       for(var j=1; j<cells.length; j++){ 
        cells[j].onclick = new Function("rowOnclick(this.parentElement)"); 
       }      
      } 
     } 

     function rowOnclick(tr) { 
       var elements = tr.cells[0].childNodes; 
       for(var i = 0; elements.length > i; i++) {       
        if ((typeof elements[i].id != "undefined") && (elements[i].id.indexOf("lnkHidden") > -1)) { 
         //opne in a new window// window.open(elements[i].href); 
         location.href=elements[i].href 
         break; 
        } 
       }     
      return false; 
     } 
    </script> 
+0

何が問題なのですか?最初の行をクリックしても関数が呼び出されますか? – StepTNT

+1

すみません、間違いました。チェックボックスをクリックして新しいページを開くという「選択」列を除外する必要があります。私は列の代わりに行を書くのに間違いを犯しました。私は最初の列 '選択'をどのように除外できますか? –

+1

だから、行のクリックがあなたのJavaScriptを実行するが、あなたの最初の列がクリックされていないとしますか? もしそうなら、あなたのページの生成されたHTMLを投稿できますか? – StepTNT

関連する問題