5

我的页面中有以下简单的组合框。

<rich:comboBox value="#{groupConfig.group}"
               styleClass="userCombo"
               filterNewValues="false"
               directInputSuggestions="true">
  <f:selectItems value="#{
    workflowConfigCtrl.groupsFor(groupConfig,appNode.approvalTier)
  }" />
</rich:comboBox>

它工作得非常好,但遗憾的是它允许输入不属于建议列表的值(这是有道理的,因为我启用了直接文本输入。

我希望启用直接文本输入,以便用户可以使用建议列表进行快速过滤(从可以包含数百个组的巨大组列表中)。

同时我不希望用户输入不在列表中的值。当前方法检查用户何时保存整个表单。有什么办法可以提前限制吗?

我尝试使用 javascript onblur= 处理程序来做到这一点,但我找不到在 dom 中保存 selectItem 列表的位置。

4

2 回答 2

3

您可以使用 javascript 访问组合框列表

#{rich:component('myComboBoxId')}.comboList.itemsText

和/或

#{rich:component('myComboBoxId')}.comboList.itemsValue

然后用于jQuery.inArray()验证该项目是否在列表中。

于 2012-09-22T18:25:19.977 回答
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 中访问它。

于 2012-08-28T17:54:08.907 回答