我希望在选中T& C复选框时启用“提交”按钮。虽然我的书面逻辑工作正常但是h:commandButton的操作即使在检查复选框后启用它也没有被调用。最初该按钮被禁用。如果我删除disabled =“TRUE”属性但代码不起作用,代码工作正常。这是我的代码:
<script type="text/javascript">
$(document).ready(start);
function start() {
$('.testing').click(
function() {
if ($(document.getElementById('form2:check'))
.is(':checked')) {
$(document.getElementById('form2:saveForm'))
.removeAttr('disabled');
} else {
$(document.getElementById('form2:saveForm')).attr(
'disabled', 'disabled');
}
});
}
</script>
JSP代码:
<h:form id="form2">
<div class="testing">
<h:selectBooleanCheckbox id="check" />
Agree
<li class="buttons ">
<div class="center">
<h:commandButton id="saveForm" styleClass="btTxt submit"
type="submit" value="Submit"
action="#{declarationFormBean.formSubmit}" disabled="true"></h:commandButton>
</div>
</li>
</h:form>
请帮忙。
答案 0 :(得分:2)
那是因为您只使用JavaScript / jQuery删除了JSF生成的HTML表示中的disabled
属性。这不会改变实际JSF组件中的disabled
属性,在解码动作事件期间会查询该属性。
这实际上是JSF的Good Thing TM ,因为否则任何黑客都可以绕过任何JSF disabled
,readonly
和rendered
属性只是操纵HTML DOM树,而它们最初用于阻止它们,就像rendered="#{request.isUserInRole('ADMIN')}
“。
您需要通过JSF而不是JS / jQuery启用按钮。
<h:selectBooleanCheckbox binding="#{check}">
<f:ajax render="saveForm" />
</h:selectBooleanCheckbox>
<h:commandButton id="saveForm" ... disabled="#{not check.value}" />
这就是全部。不需要自定义JS / jQuery混乱,也不需要任何其他JSF bean属性。上面的代码按原样完成。