JSF2.0 - InputTextArea внутри Dialog не может быть получено через Jquery во время события onShow диалога - PullRequest
1 голос
/ 18 января 2012

У меня на странице .xhtml следующее диалоговое окно.

<p:dialog widgetVar="exampleDialog" onShow="fillTextArea()" >
    <p:tabView id="tabView">
        <p:tab id="exampleTab" title="Example">
            <p:inputTextarea id="someInputTextArea" autoResize="false"
                value="" />
        </p:tab>
    </p:tabView>
</p:dialog>

Диалог отображается при нажатии кнопки.Функция fillTextArea javascript определена внутри тегов сценария в заголовке документа.

function fillTextArea() {
    console.log(jQuery("textarea[id='someInputTextArea']")); // logs empty array []
    console.log($("[id='someInputTextArea']")); // logs empty array []
    jQuery("textarea[id='someInputTextArea']").val('xxx'); // does nothing
}

В чем проблема?Почему я не могу получить область ввода текста?

Вместо использования события onShow для Dialog я попытался:

exampleDialog.show();
fillTextArea();

на всякий случай.Но это тоже не сработало.Я пытаюсь установить содержимое inputTextArea.

Любая помощь приветствуется.Благодаря.

1 Ответ

3 голосов
/ 18 января 2012

jQuery работает на сгенерированном JSF дереве HTML DOM, а не на исходном коде JSF.Компоненты JSF не обязательно генерируют тот же идентификатор клиента (идентификатор элемента HTML), который вы указали в идентификаторе компонента.К ним можно добавить идентификаторы родительских компонентов NamingContainer.<h:form> и <p:tabView> являются такими компонентами.

Откройте страницу в веб-браузере, щелкните правой кнопкой мыши и Просмотреть исходный код и найдите сгенерированный HTML-код <p:inputTextarea>.Это будет выглядеть примерно так:

<textarea id="formId:tabViewId:textareaId">

Вам необходимо указать точно этот идентификатор в селекторе jQuery.

$("[id='formId:tabViewId:textareaId']");

См. Также:

...