2011-05-27 93 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>標籤。