2

JavaScript を使用して、JSF/Facelets ページの非表示の入力フィールドを操作したいと考えています。ページが読み込まれると、隠しフィールドをクライアントの色深度に設定する必要があります。

私のFaceletから:

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

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

JSF がページを処理するとき、もちろん要素の ID を変更しています。JavaScript コードからこれらの要素を参照する最良の方法は何ですか?

4

4 に答える 4

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');">
于 2008-10-23T20:35:02.523 に答える
0

UIComponent.getClientId(FacesContext)によって返されるコントロールのclientIdを使用できます。サンプルコードはこちらをご覧ください。

于 2008-11-05T17:43:41.120 に答える
0

生成された html ソースを表示し、jsf がタグの id 属性に付けた名前を確認します。

命名規則がどのように機能するかはすぐにわかります。通常は FORMNAME:FIELDNAME のようになります

于 2008-10-23T20:35:38.140 に答える
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'));">
于 2008-11-05T18:19:39.037 に答える