0

我有 2 个字段。一个是 ah:selectOneMenu 与地点列表。另一个是啊:inputText。

我想要做的是,如果用户在 selectOneMenu 上选择地点,然后点击搜索,它将搜索那个地点。如果他在 selectOneMenu 上选择了一个地方,但仍然在 inputText 上键入其他地方并单击搜索,它将搜索已写入的地方而不是选定的地方。

因此,如果用户在 inputtext 上键入任何内容,它会禁用 selectOneMenu,如果他清除该字段,它将再次启用,这将是非常棒的。我尝试在事件中使用 javascript

onchange="if (this.value !='') document.getElementById('placeSelectOneMenu').disabled='true'"

但它没有用。我能做些什么?有任何想法吗?

它仅在我单击搜索时才有效,而不是正确地重新渲染该字段。我想要的是动态地重新渲染。

4

1 回答 1

2

元素 ID 需要是生成的 HTML 元素 ID 的 ID,而不是 JSF 组件 ID。JavaScript 完全没有服务器端 JSF 代码的概念。它所能看到和访问的只是 JSF 生成的 HTML DOM 树。在浏览器中打开页面,右键单击它并选择View Source。a 生成的 HTML<h:selectOneMenu id="placeSelectOneMenu">应该如下所示

<select id="someFormId:placeSelectOneMenu">

someFormId父母的ID在哪里<h:form>

在这种情况下,您需要按如下方式获取它

document.getElementById('someFormId:placeSelectOneMenu')

但是由于在客户端更改 HTML 输入元素而不通知服务器端的 JSF 会导致意外行为(如果您在客户端通过纯 JS 启用它,那么它不会在服务器端神奇地启用为好吧,JSF 不会处理最初被禁用的字段的提交值)并且您正在使用 RichFaces,我建议采用纯 JSF 方法,例如使用 RichFaces 3.x 的<a4j:support>标签。

于 2011-05-27T19:58:08.343 回答