Jsf 如何使用javascript从p:selectOneRadio获取所选选项
如何使用javascript/jquery在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:
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输入具有idmyRadio
,则以下行将获得所选值:
$('[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()