我有一个富人:日历:
<rich:calendar
id = "endDate"
value = ...
datePattern = "yyyy-MM-dd"
enableManualInput = "true"
disabled = "#{detailModel.mode == detailModel.viewMode}"
/>
我想用javascript启用/禁用它。 我有以下代码,但它对日历没有影响:
<script type="text/javascript">
//<![CDATA[
function setDafaults(defType, endDate, startTime)
{
var definitionType = defType.options[defType.selectedIndex].text;
if(definitionType == 'DEFAULT')
{
endDate.disabled = true;
startTime.value = "#{detailModel.afterObject.getDefaultStartTime()}";
}
else
{
endDate.disabled = false;
startTime.value = '';
}
}
//]]>
</script>
当selectOneMenu改变时调用该函数:
...
onchange="setDafaults(document.getElementById('detailForm:definitionType'),
document.getElementById('detailForm:endDate'),
document.getElementById('detailForm:startTime'))
...
我错过了什么/错误在哪里?
答案 0 :(得分:2)
您的错误是您没有通知JSF它已启用。在处理表单提交期间,JSF将重新评估disabled
属性。但是,当您使用JS而不是使用JSF启用它时,JSF从未被指示它已启用,因此仍然认为它已被禁用,因此将跳过它。
你基本上有两个选择:
disabled
属性中检查它。我只选择JSF方式。 E.g。
<h:selectOneMenu value="#{bean.definitionType}">
<f:selectItem itemValue="DEFAULT" />
<f:selectItem itemValue="NOT_DEFAULT" />
<f:selectItem itemValue="SOME" />
<f:ajax render="endDate" />
</h:selectOneMenu>
<rich:calendar id="endDate" ... disabled="#{bean.definitionType == 'DEFAULT'}" />
基本上都是这样。不需要一些讨厌的JS。