2008-10-23 80 views
2

我想使用JavaScript來處理JSF/Facelets頁面中隱藏的輸入字段。加載頁面時,我需要將隱藏字段設置爲客戶端的顏色深度。在JSF和Facelets中使用JavaScript

從我的facelet:

<body onload="setColorDepth(document.getElementById(?????);"> 

<h:form> 
    <h:inputHidden value="#{login.colorDepth}" id="colorDepth" /> 
</h:form> 

當JSF處理的頁面,當然改變了元素的ID的。從我的JavaScript代碼中引用這些元素的最佳方式是什麼?

回答

4

您需要設置表單的ID,以便知道它是什麼。然後你就可以構造出實際的元素ID。

<body onload="setColorDepth(document.getElementById('myForm:colorDepth');"> 

<h:form id="myForm"> 
    <h:inputHidden value="#{login.colorDepth}" id="colorDepth" /> 
</h:form> 

如果你不想設置窗體的ID字段,可以在運行時找到它,像這樣:

<body onload="setColorDepth(document.getElementById(document.forms[0].id + ':colorDepth');"> 
+0

是不是可能更動態的嗎? – 2008-10-23 21:37:13

0

查看生成的HTML源代碼,並期待在JSF命名什麼標籤的id屬性。

您將很快看到命名約定是如何工作的。它通常類似於FORMNAME:FIELDNAME

+0

這是有點危險,因爲生成的ID可能會意外更改。例如,如果在表單元素之前添加了JSF元素,它將會改變。 – sblundy 2008-10-23 20:41:43

+0

這就是爲什麼最佳做法是始終命名您的組件。在這種情況下,他有id =「colorDepth」。表格也應該有一個名稱。只有他改變它纔會改變。或者在此表單之前添加一個新表單。這就是人臉發展的陷阱。 – branchgabriel 2008-10-24 14:43:16

0

全局定義的函數findElement,並用它無處不在

function findElement(elementId) { 
     if(document.getElementById(elementId)) return elementId; 
     for(var i = 0; i < document.forms.length; i++) { 
      if(document.getElementById(document.forms[i].id + ':' + elementId)) { 
       return document.forms[i].id + ':' + elementId; 
      } 
     } 
     return null; 
    } 


    <body onload="setColorDepth(findElement('colorDepth'));">