【发布时间】:2018-04-20 10:28:36
【问题描述】:
我在使用 JSF 动态创建的表中有复选框,我得到如下 HTML 输出,
<input name="testForm:j_idt78:0:negative" id="testForm:j_idt78:0:negative" onchange='PrimeFaces.ab({s:this,e:"change",p:"testForm:j_idt78:0:negative"});' type="checkbox">
<input name="testForm:j_idt78:0:positive" id="testForm:j_idt78:0:positive" onchange='PrimeFaces.ab({s:this,e:"change",p:"testForm:j_idt78:0:positive"});' type="checkbox">
<input name="testForm:j_idt78:0:na" id="testForm:j_idt78:0:na" onchange='PrimeFaces.ab({s:this,e:"change",p:"testForm:j_idt78:0:na"});' type="checkbox">
如果我选中一个复选框,那么其他两个应该取消选中,并且所有复选框都相同,任何时候都应该连续选中一个复选框。
以上是仅一行的示例,以及如何为N number rows[表格可能包含任意数量的行。]
以下是动态生成复选框的实际代码
<ui:repeat var="item" value="#{testController.itemsList}" varStatus="loop">
<p:row>
<p:column>
<h:outputText value="#{item.desc}" />
</p:column>
<p:column>
<h:outputText value="#{item.code}" />
</p:column>
<p:column>
<h:selectBooleanCheckbox value="#{testController.negative}" id="negative"> </h:selectBooleanCheckbox>
</p:column>
<p:column>
<h:selectBooleanCheckbox value="#{testController.positive}" id="positive"> </h:selectBooleanCheckbox>
</p:column>
<p:column>
<h:selectBooleanCheckbox value="#{testController.na}" id="na"> </h:selectBooleanCheckbox>
</p:column>
</p:row>
</ui:repeat>
我尝试了类似以下的操作,但仍然没有取消选中该行中的复选框,并在控制台中给了我以下异常
SCRIPT5022: Syntax error, unrecognized expression: unsupported pseudo: j_idt78
function selectUnSelect(elementName) {
var fields = elementName.split(':');
var formName = fields[0];
var jsfId = fields[1];
var fieldIndex = fields[2];
var propertyName = fields[3];
console.log(formName+":"+jsfId+":"+fieldIndex+":positive");
if(propertyName == 'positive'){
$("#"+formName+":"+jsfId+":"+fieldIndex+":positive").attr('checked', true);
$("#"+formName+":"+jsfId+":"+fieldIndex+":negative").attr('checked', false);
$("#"+formName+":"+jsfId+":"+fieldIndex+":na").attr('checked', false);
}
if(propertyName == 'negative'){
$("#"+formName+":"+jsfId+":"+fieldIndex+":positive").attr('checked', false);
$("#"+formName+":"+jsfId+":"+fieldIndex+":negative").attr('checked', true);
$("#"+formName+":"+jsfId+":"+fieldIndex+":na").attr('checked', false);
}
if(propertyName == 'na'){
$("#"+formName+":"+jsfId+":"+fieldIndex+":positive").attr('checked', false);
$("#"+formName+":"+jsfId+":"+fieldIndex+":negative").attr('checked', false);
$("#"+formName+":"+jsfId+":"+fieldIndex+":na").attr('checked', true);
}
}
请帮我解决问题。
【问题讨论】:
-
在谷歌中发布错误
SCRIPT5022: Syntax error, unrecognized expression: unsupported pseudo: j_idt78!也许添加'jsf'到它 -
请注意,您可以通过写
$("#...positive").attr('checked', (propertyName == 'positive'));来干燥您的 WET 代码 -
它像@jasperdevries 状态一样重复。 PF 在 PF.escapeClientId javascript 函数中有执行此操作的快捷方式。请参阅文档。
标签: javascript html jsf-2