JavaScriptを使用してP:SelectOneradioから選択したオプションを取得する方法

StackOverflow https://stackoverflow.com/questions/8385591

  •  28-10-2019
  •  | 
  •  

質問

どのラジオが選択されているかをどのように入手しますか p:selectOneRadio JavaScript/jQueryを使用していますか?

以来 p:selectOneRadio 無線タグなし私は、CSSセレクターを使用してチェックされたオプションを取得する方法がわかりません。

    <p:selectOneRadio onchange="reactToChangedRadio()" >
              <f:selectItem itemLabel="....." itemValue="..." />
              <f:selectItem itemLabel="....." itemValue="..." />
              <f:selectItem itemLabel="....." itemValue="..." />
    </p:selectOneRadio>
役に立ちましたか?

解決

jQueryソリューションを使用するか、簡単なJavaScriptソリューションを選択できます。

document.getElementById("myFormId:mySelectId")[0].checked 

Coderanchの投稿を参照してください: http://www.coderanch.com/t/210871/jsf/java/selectoneradio-javascript-value

更新:私は部門にいることを認めなければなりません、そして私はそれを申し訳ありませんが、昨日はあまり時間がありませんでした...

私は昔ながらのJavaScriptの方法で無線価値を得ることができなかったと言わなければなりません:

                 <script type="text/javascript">
                      /*  <![CDATA[ */

                        function reactToChangedRadio(){
                           alert("I'm in!");
                           var myval;
                            for(i=0;i<3;i++){
                                    if(document.forms['myFormId']['myFormId:myRadio'][i].checked == true ){
                                        myval = document.forms['myFormId']['myFormId:myRadio'].text/value;
                                    }
                                }
                                alert( "val = " + myval );
                        }
                    /*    ]]> */
                </script>

一方、このハードコーディングされたソリューションは機能します。

                 <script type="text/javascript">
                      /*  <![CDATA[ */

                        function reactToChangedRadio(){
                           alert("I'm in");
                           var myval;
                           if(document.forms['myFormId']['myFormId:myRadio'][0].checked == true ){
                              myval = "first button";
                           }else if(document.forms['myFormId']['myFormId:myRadio'][1].checked == true ){
                              myval = "second button";
                           }else if(document.forms['myFormId']['myFormId:myRadio'][2].checked == true ){
                              myval = "third button";
                           }

                           alert( "val = " + myval );
                        }
                    /*    ]]> */
                    </script>

、しかし、もちろん、PrimeFacesのパワーのために、サーバー側のソリューションがあります(ReuqestContextコンポーネントを使用):

                 <h:form id="myFormId">
                        <p:selectOneRadio id="myRadio" value="#{handleFiles.radioVal}" >
                            <p:ajax event="change" oncomplete="handleComplete(xhr, status, args)" listener="#{handleFiles.testMethod}" />
                            <f:selectItem itemLabel="1" itemValue=" first" />
                            <f:selectItem itemLabel="2" itemValue=" second" />
                            <f:selectItem itemLabel="3" itemValue=" third" />
                        </p:selectOneRadio>
                    </h:form>
<script type="text/javascript">
 function handleComplete(xhr, status, args) {  
    alert("Selected Radio Value" + args.myRadVal);  
 } 
</script>

サーバーサイドコード:

private String radioVal;

public String getRadioVal() {
    return radioVal;
}

public void setRadioVal(String radioVal) {
    this.radioVal = radioVal;
}

public void test(){
    RequestContext context = RequestContext.getCurrentInstance();  
    context.addCallbackParam("myRadVal", radioVal);
    System.out.println("radioVal: "+radioVal);
}

ReuqestContextコンポーネントはこちらにあります: http://www.primefaces.org/showcase-labs/ui/requestcontext.jsf (PF 3のみ)

他のヒント

問題は、PFウィジェットのgetJQメソッドを使用することにより、jQuery find()で簡単に解決できます。

<p:selectOneRadio ... widgetVar="mySelectName" .../>

呼び出して現在の値を取得できます。

PF('mySelectName').getJQ().find(':checked').val();

JSで選択したアイテムの値が必要な場合は、 this.value パラメーター。 PF生成されたHTMLの内部を見る:

<input id="{component_id}:{index}" name="{component_id}" type="radio" value="{itemValue}"
    checked="checked" onchange="reactToChangedRadio(this.value);">
...

それぞれのため selectItem。したがって、 this.value 完全に機能し、検索する必要はありません checked:

<script>
    function reactToChangeRadio(par){
        alert('Value of selected item is: ' + par);
    }
</script>

<p:selectOneRadio onchange="reactToChangedRadio(this.value);" >
          <f:selectItem itemLabel="....." itemValue="..." />
          <f:selectItem itemLabel="....." itemValue="..." />
          <f:selectItem itemLabel="....." itemValue="..." />
</p:selectOneRadio>

または、合格することができます this.id jqueryセレクターで使用する関数に。

あなたはあなたを使っています :チェック 擬似セレクター:詳細はこちら: http://api.jquery.com/checked-selector/

 $(":checked")

あなたがする必要があるのは、次のようにチェックされたものを除くすべてのラジオボタンを無効にすることです。

<h:selectOneRadio id="rad" ... onclick="dataTableSelectOneRadio(this)" >
  <f:selectItems .... />
</h:selectOneRadio>

そして、これがあなたのスクリプトです:

function dataTableSelectOneRadio(radio){
      var id = radio.name.substring(radio.name.lastIndexOf(':'));
      var temp = radio.name.lastIndexOf(':') - 1;
      var index = radio.name.substring(temp,temp+1);
      var el = radio.form.elements;

       for(var i = 0 ; el.length; i++)
       {
          if(el[i].name.substring(el[i].name.lastIndexOf(':')) == id) {
              if(el[i].name.indexOf(index) != -1)
                  el[i].check = true;
              else
                   el[i].check = false;

           }
       }

}

この質問には、ページに複数のSelectOnerAdio入力がある場合も処理する1行のソリューションがあります。

フォームが呼び出されている場合 myForm, 、およびselectoneradio入力にIDがあります myRadio, 、次の行に選択された値が取得されます。

$('[id^=myForm\\:myRadio]:checked').val()

これは、すべての内部入力に最初のIDが与えられるために機能します myForm:myRadio. 。上の行は、その文字列から始まるすべてのエンティティを見つけ、チェックされたエンティティのみを選択します。 1つのラジオボタンのみをチェックできるため、選択したラジオボタンが表示されます。その後、その価値を単純につかむことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top