如何使用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>
答案 0 :(得分: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)
答案 1 :(得分: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选择器中使用它。
答案 2 :(得分:2)
使用jfery find()可以通过使用pf小部件的getJQ方法轻松解决问题:
<p:selectOneRadio ... widgetVar="mySelectName" .../>
我们可以通过调用获取当前值:
PF('mySelectName').getJQ().find(':checked').val();
答案 3 :(得分:0)
您可以使用:已检查伪选择器: 更多信息:http://api.jquery.com/checked-selector/
$(":checked")
答案 4 :(得分: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;
}
}
}
答案 5 :(得分:0)
此问题有一个单行解决方案,它还可以处理页面上有多个selectOneRadio输入的情况。
如果您的表单被称为myForm
,并且您的selectOneRadio输入的ID为myRadio
,则以下行将获得所选值:
$('[id^=myForm\\:myRadio]:checked').val()
这是有效的,因为所有内部输入的id都以myForm:myRadio
开头。上面的行查找以该字符串开头的所有实体,并仅选择已检查的实体。由于一次只能检查一个单选按钮,因此会显示所选的单选按钮。然后我们可以简单地抓住它的价值。