повторно введите поле с помощью команды javascript - PullRequest
0 голосов
/ 27 мая 2011

У меня есть 2 поля. Одним из них является h: selectOneMenu со списком мест. другой - h: inputText.

Я пытаюсь сделать следующее: если пользователь выберет место в selectOneMenu и нажмет на поиск, он будет искать это место. Если он выбирает место в selectOneMenu и по-прежнему вводит другое место в inputText и нажимает кнопку поиска, он будет искать место, которое было написано, а не выбранное.

Таким образом, было бы замечательно, если бы пользователь вводил что-либо в тексте ввода, он отключил бы selectOneMenu, и если он очистил поле, он был бы снова включен. Я пробовал с javascript на событие

onchange = "if (this.value! = '') document.getElementById ( 'placeSelectOneMenu'). отключено = 'истина' "

но это не сработало. Что я могу сделать? Есть идеи?

Работает только тогда, когда я нажимаю на поиск, затем корректно переопределяем поле. То, что я хочу, - это рендеринг динамически.

1 Ответ

1 голос
/ 27 мая 2011

Идентификатор элемента должен быть идентификатором сгенерированного идентификатора элемента HTML, а не идентификатором компонента JSF. В JavaScript совершенно отсутствует представление о JSF-коде на стороне сервера. Все, что он может видеть и получать к нему доступ - это просто дерево HTML DOM, сгенерированное JSF. Откройте страницу в браузере, щелкните ее правой кнопкой мыши и выберите Просмотр источника . Сгенерированный HTML-код <h:selectOneMenu id="placeSelectOneMenu"> должен выглядеть следующим образом

<select id="someFormId:placeSelectOneMenu">

(где someFormId - идентификатор родителя <h:form>)

В этом случае вам нужно получить его следующим образом

document.getElementById('someFormId:placeSelectOneMenu')

Но поскольку изменение элементов ввода HTML на стороне клиента без уведомления JSF на стороне сервера может привести к неожиданным действиям (если вы включите его на стороне клиента с помощью чистого JS, то он не будет волшебным образом включен на на стороне сервера, и JSF не будет обрабатывать переданное значение поля, которое было изначально отключено), и что вы используете RichFaces, я бы предложил использовать чисто JSF-подход, например, с RichFaces 3.x <a4j:support> тег.

...