2011-05-27 94 views
0

我有2个字段。一个是h:selectOneMenu和一个地方列表。另一个是h:inputText。reRender与JavaScript命令字段

我想要做的是,如果用户在selectOneMenu上选择了位置,然后单击搜索,它将搜索该位置。如果他在selectOneMenu上选择了一个地方,并且仍然在inputText上键入其他地方并单击搜索,那么它将搜索被写入的地方而不是所选的地方。

因此,如果用户在输入文本上键入任何内容,它将会很棒,它会禁用selectOneMenu,并且如果他清除该字段,它将被再次启用。我用JavaScript试图对事件

的onchange = “如果(THIS.VALUE!= '') 的document.getElementById( 'placeSelectOneMenu')。禁用= '真正的'”

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

它只在点击搜索时才起作用,而不是正确地重新调整字段。我想要的是动态reRender。

+0

“reRender”是RichFaces 3.x特定的属性名称。你在使用RichFaces 3.x吗?这不是一个特定于JavaScript的术语或其他内容。请谨慎使用术语,因为滥用/误解会导致混淆。 – BalusC 2011-05-27 19:56:30

回答

1

元素ID需要是生成的HTML元素ID的ID,而不是JSF组件ID。 JavaScript完全没有服务器端JSF代码的概念。它可以看到并访问的只是由JSF生成的HTML DOM树。在浏览器中打开页面,右键单击它并选择查看源文件。一个<h:selectOneMenu id="placeSelectOneMenu">的生成HTML应该是这样

<select id="someFormId:placeSelectOneMenu"> 

(其中someFormId是父<h:form>的ID)

在这种情况下,你需要把它作为代替如下

document.getElementById('someFormId:placeSelectOneMenu') 

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