4

您如何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>
4

6 回答 6

5

通过使用 pf 小部件的 getJQ 方法,可以使用 jquery find() 轻松解决该问题:

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

我们可以通过调用获取当前值:

PF('mySelectName').getJQ().find(':checked').val();
于 2015-05-15T16:06:31.070 回答
4

您可以使用 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)

于 2011-12-05T14:31:24.997 回答
2

如果您只需要 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 选择器中使用它。

于 2013-09-26T13:31:32.747 回答
0

你有你使用:checked伪选择器:更多信息在这里:http ://api.jquery.com/checked-selector/

 $(":checked")
于 2011-12-05T12:55:59.387 回答
0

您需要做的就是禁用所有单选按钮,除了已检查的单选按钮,例如:

<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;

           }
       }

}

于 2012-10-22T11:47:16.400 回答
0

这个问题有一个单行解决方案,也可以处理页面上有多个 selectOneRadio 输入的情况。

如果您的表单被调用myForm,并且您的 selectOneRadio 输入具有 id myRadio,那么以下行将获得选定的值:

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

这是可行的,因为所有内部输入都被赋予了一个以 . 开头的 id myForm:myRadio。上面的行查找以该字符串开头的所有实体,并仅选择选中的实体。由于一次只能检查一个单选按钮,因此这给出了选定的单选按钮。然后我们可以简单地获取它的值。

于 2017-05-09T09:38:03.117 回答