我的页面中有以下简单的组合框。
<rich:comboBox value="#{groupConfig.group}"
styleClass="userCombo"
filterNewValues="false"
directInputSuggestions="true">
<f:selectItems value="#{
workflowConfigCtrl.groupsFor(groupConfig,appNode.approvalTier)
}" />
</rich:comboBox>
它的工作非常出色,但遗憾的是它允许输入不属于suggestionList的值(这是有意义的,因为我启用了直接文本输入。
我希望启用直接文本输入,以便用户可以使用建议列表快速过滤(来自可包含数百个组的巨大组列表)。
同时我不希望用户输入不在列表中的值。当前方法检查用户何时保存整个表单。有没有办法提前限制它?
我尝试使用javascript onblur = handler,但我找不到在dom中保存selectItem列表的位置。
答案 0 :(得分:3)
您可以使用
在javascript中访问comboBox列表#{rich:component('myComboBoxId')}.comboList.itemsText
和/或
#{rich:component('myComboBoxId')}.comboList.itemsValue
然后使用jQuery.inArray()
验证该项目是否在列表中。
答案 1 :(得分:2)
您应该能够通过在以下示例中指定其ID来访问DOM中的此组合框。
<rich:comboBox value="#{groupConfig.group}"
id="UniqueID"
styleClass="userCombo"
filterNewValues="false"
directInputSuggestions="true">
<f:selectItems value="#{
workflowConfigCtrl.groupsFor(groupConfig,appNode.approvalTier)
}" />
</rich:comboBox>
然后,您可以使用document.getElementById("UniqueID")
在DOM中访问它。