1

私は PrimeFaces 3.4 を使用しています<p:selectManyCheckbox>。ユーザーが 2 番目または 6 番目の選択項目をチェックしたかどうかを知りたいです。

関連するコードは次のとおりです。

<h:form id="signup-form">
    <p:commandButton type="button" value="Export" icon="ui-icon-extlink" onclick="exportChart()"/>  
    <p:selectManyCheckbox id="ja"  layout="pageDirection">  
        <f:selectItem id="hola" itemLabel="Importadores." itemValue="1" />  
        <f:selectItem itemLabel="Distribuidores nacionales o regionales." itemValue="1" />  
        <f:selectItem itemLabel="Cadenas de Supermercados." itemValue="1" /> 
        <f:selectItem itemLabel="Otros minoristas de venta a cliente final." itemValue="1" />  
        <f:selectItem itemLabel="Hoteles, restaurantes, cafeterías o similares." itemValue="1" />  
        <f:selectItem itemLabel="Cliente final particular." itemValue="2" /> 
        <f:selectItem itemLabel="Cliente final empresas." itemValue="2" />
    </p:selectManyCheckbox>
</h:form>

コマンドボタンのexportChart()クリック時に実行される機能は次のとおりです。

<script>
    function exportChart() {  
        alert($(PrimeFaces.escapeClientId('signup-form:ja:hola')).is(':checked'));
    }  
</script>

ただし、常に警告しfalseます。ユーザーが 2 番目または 6 番目の選択項目をチェックしたかどうかを確認するにはどうすればよいですか?

4

2 に答える 2

2

あなたがそこにいるように、基本的<p:selectManyCheckbox>に次のHTMLを生成します(すべてのjQuery UIの空想は省略されています):

<input id=​"signup-form:​ja:0" name=​"signup-form:​ja" type=​"checkbox" value=​"1">​
<input id=​"signup-form:​ja:​1" name=​"signup-form:​ja" type=​"checkbox" value=​"1">​
<input id=​"signup-form:​ja:​2" name=​"signup-form:​ja" type=​"checkbox" value=​"1">​
<input id=​"signup-form:​ja:​3" name=​"signup-form:​ja" type=​"checkbox" value=​"1">​
<input id=​"signup-form:​ja:​4" name=​"signup-form:​ja" type=​"checkbox" value=​"1">​
<input id=​"signup-form:​ja:​5" name=​"signup-form:​ja" type=​"checkbox" value=​"2">​
<input id=​"signup-form:​ja:​6" name=​"signup-form:​ja" type=​"checkbox" value=​"2">​

したがって、次の jQuery でそれを行う必要があります。

if ($("input[name='signup-form:ja']:eq(1)").is(":checked")) {
    alert("The second item is checked");
}

if ($("input[name='signup-form:ja']:eq(5)").is(":checked")) {
    alert("The sixth item is checked");
}

インデックスはゼロベースであることに注意してください。


具体的な問題とは関係ありませんが、アイテムの値をすべて一意になるように修正します。そうしないと、サーバー側でどのアイテムが正確にチェックされているかまったくわからなくなります。アイテムラベルではなく、サーバー側。一意のアイテム値を使用すると、jQuery でチェック済みの値をより確実に判断することもできます。アイテム インデックスに基づくのは、メンテナンスが不可能なため厄介です (たとえば、ビジネス要件に基づいてアイテムを再配置または拡張する必要がある場合は、すべてのスクリプトを修正する必要があります)。

于 2012-12-02T03:14:43.177 に答える
0

こんにちは私はチェックする方法を解決しました、私は3つのことをしました:

1- selectManyCheckBoxにIDを設定し、 *selectItemごとにinputexttype=hiddenを作成しました。`

                                <p:selectManyCheckbox  id="many1" value="#{cuestionarioController.pd2Opciones}" layout="pageDirection">  
                                    <f:selectItem itemLabel="Centroamerica." itemValue="3" />  
                                    <f:selectItem itemLabel="Mexico." itemValue="4" />  
                                    <f:selectItem itemLabel="Estados Unidos/Canada." itemValue="5" /> 
                                    <f:selectItem itemLabel="Brasil." itemValue="5" />  
                                    <f:selectItem itemLabel="Sudamérica." itemValue="4" /> 
                                    <f:selectItem itemLabel="Caribe." itemValue="5" /> 
                                    <f:selectItem itemLabel="España." itemValue="5" /> 
                                    <f:selectItem itemLabel="Otros países europeos." itemValue="6" />
                                    <f:selectItem itemLabel="China." itemValue="6" />
                                    <f:selectItem itemLabel="Otros." itemValue="2" />
                                    <f:selectItem itemLabel="La empresa no ha comenzado a exportar de forma regular." itemValue="0" />
                                    <p:ajax listener="#{cuestionarioController.sumarOpciond2}"/>
                                </p:selectManyCheckbox>
                            </p:panelGrid>

                            <p:inputText id="texto1" type="hidden" value="#{cuestionarioController.pi.vali1D2}" /> 
                            <p:inputText id="texto2" type="hidden" value="#{cuestionarioController.pi.vali2D2}" />  
                            <p:inputText id="texto3" type="hidden" value="#{cuestionarioController.pi.vali3D2}" />  
                            <p:inputText id="texto4" type="hidden" value="#{cuestionarioController.pi.vali4D2}" />  
                            <p:inputText id="texto5" type="hidden" value="#{cuestionarioController.pi.vali5D2}" />  
                            <p:inputText id="texto6" type="hidden" value="#{cuestionarioController.pi.vali6D2}" />  
                            <p:inputText id="texto7" type="hidden" value="#{cuestionarioController.pi.vali7D2}" />  
                            <p:inputText id="texto8" type="hidden" value="#{cuestionarioController.pi.vali8D2}" />  
                            <p:inputText id="texto9" type="hidden" value="#{cuestionarioController.pi.vali9D2}" />  
                            <p:inputText id="texto10" type="hidden" value="#{cuestionarioController.pi.vali10D2}" />  
                            <p:inputText id="texto11" type="hidden" value="#{cuestionarioController.pi.vali11D2}" />  

                        </p:outputPanel>`

2-javascriptで関数を呼び出すcommandButton。

<p:commandButton type="button" value="Resultado" onclick="validate()"/>

3-私がvalidateと呼んだ関数Javascript、これでは、jqueryの彼のコンポーネントの参照であるprimefacesのescapeClientIdを使用しました。重要なのは参照です。コードが基本的にHTML「formInternacionalizacion:tabPreg_Inter:many1:0」のprimefacesによって生成されるのを見ました。最初はフォーム、2番目はTabView、3番目はselectManyCheckBox、最後はselectItemの場所です。したがって、チェックボックスが変更されると、これは入力テキストを設定します

function validate() {  
              //de2

            if($(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:many1:0')).is(':checked') == true){ 
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto1')).val("1");
            }else{
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto1')).val("0");
            }

            if($(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:many1:1')).is(':checked') == true){ 
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:text2')).val("1");
            }else{
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto2')).val("0");
            }

            if($(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:many1:2')).is(':checked') == true){ 
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto3')).val("1");
            }else{
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto3')).val("0");
            }

            if($(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:many1:3')).is(':checked') == true){ 
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto4')).val("1");
            }else{
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto4')).val("0");
            }

            if($(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:many1:4')).is(':checked') == true){ 
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto5')).val("1");
            }else{
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto5')).val("0");
            }

            if($(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:many1:5')).is(':checked') == true){ 
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto6')).val("1");
            }else{
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto6')).val("0");
            }

            if($(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:many1:6')).is(':checked') == true){ 
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto7')).val("1");
            }else{
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto7')).val("0");
            }

            if($(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:many1:7')).is(':checked') == true){ 
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto8')).val("1");
            }else{
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto8')).val("0");
            }

            if($(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:many1:8')).is(':checked') == true){ 
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto9')).val("1");
            }else{
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto9')).val("0");
            }

            if($(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:many1:9')).is(':checked') == true){ 
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto10')).val("1");
            }else{
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto10')).val("0");
            }

            if($(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:many1:10')).is(':checked') == true){ 
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto11')).val("1");
            }else{
                $(PrimeFaces.escapeClientId('formInternacionalizacion:tabPreg_Inter:texto11')).val("0");
            }

            location.href ="resultadoGraficoMedia.xhtml";
        }  
于 2012-12-03T14:59:22.193 に答える