Jsf 如何使用javascript从p:selectOneRadio获取所选选项

Jsf 如何使用javascript从p:selectOneRadio获取所选选项,jsf,primefaces,selectoneradio,Jsf,Primefaces,Selectoneradio,如何使用javascript/jquery在p:selectOneRadio中选择哪个收音机 由于p:selectOneRadio没有使用无线电标签,我不知道如何使用CSS选择器获取选中选项 <p:selectOneRadio onchange="reactToChangedRadio()" > <f:selectItem itemLabel="....." itemValue="..." /> <f:

如何使用javascript/jquery在
p:selectOneRadio
中选择哪个收音机

由于
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的帖子:

更新: 我必须承认我在一个部门,对此我很抱歉,但昨天我没有太多时间

我必须说,我无法用老式的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>

ReuqestContext组件可以在这里找到:(仅适用于PF 3)

您需要做的就是禁用除选中的单选按钮之外的所有单选按钮,如:

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

}

如果您只需要JS中所选项目的值,您可以使用
此.value
参数调用您的函数。 查看PF生成的HTML:

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

或者,您可以将
这个.id
传递到函数中,以便在jQuery选择器中使用它。

使用pf小部件的getJQ方法,使用jQuery find()可以轻松解决此问题:

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

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

如果您的表单被称为
myForm
,并且您的selectOneRadio输入具有id
myRadio
,则以下行将获得所选值:

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

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

这不会返回选中的值。这只返回项目本身是否被选中。@BalusC Yes,my bad,它应该包含一个for循环,而零应该是迭代器变量……要获得选中的项目,迭代什么&如何?只需迭代从DOM获得的单选按钮。您可能希望重新构造您的问题,将JSF排除在上下文之外,只发布JSF生成的HTML标记代码(并重新标记问题),以便JS/jQuery用户可以更轻松地帮助您。@BalusC我已经更新了我的答案,很抱歉由于时间不够造成的混乱…我已经更新了我的答案,抱歉,由于时间不够造成了混乱。。。
<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;

           }
       }
<input id="{component_id}:{index}" name="{component_id}" type="radio" value="{itemValue}"
    checked="checked" onchange="reactToChangedRadio(this.value);">
...
<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>
<p:selectOneRadio ... widgetVar="mySelectName" .../>
PF('mySelectName').getJQ().find(':checked').val();
$('[id^=myForm\\:myRadio]:checked').val()