Автозаполнение JQuery не работает для перерисованных текстовых полей - PullRequest
0 голосов
/ 30 ноября 2010

У меня проблема с получением автозаполнения jequery для работы с перерисованными текстовыми полями.

У меня есть a4j: commandlink, чтобы показать еще несколько полей ввода в моей форме, когда я нажимаю на эту кнопку, я переопределяю внешнюю панель a4j: output, чтобы перерисовать содержимое. Но, к моему удивлению, событие автозаполнения jQuery никогда не запускается для моего повторно обработанного текстового поля. Он работает, как и ожидалось, до рендера. Текстовое поле получает автозаполнение на основе своего идентификатора от карт Google, например:

jQuery(document).ready(function(){
    jQuery("#createActivityAddressInputId").autocomplete({
    //This bit uses the geocoder to fetch address values
    ...
});
}

<a4j:outputPanel id="createActivityPanel">
    ...
    <h:inputText id="#{GUIComponentIds.createActivityAddressInputId}" value="#"
        {activityRequestBean.newActivityAddress}" />
    <a4j:commandLink value="#{msg.createActivityShowmapLabel}" 
        oncomplete="onShowMapPanel()" action="#{activityRequestBean.showMapClicked}" 
        rendered="#{!activityRequestBean.showMap}" 
        reRender="createActivityMapPanel,createActivityPanel" />
    ...
</a4j:outputPanel>

Я думал, что это может быть связано с тем, что событие автозаполнения подключено к загрузке документа, или я уже здесь?

Спасибо!

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

Да; вам нужно будет повторно присоединить автозаполнение, вызывая один и тот же метод каждый раз, когда вы выполняете рендер. (Предположительно, вы бы кэшировали параметры, которые вы передаете для автозаполнения.)

Что-то вроде:

var autocompleteOptions = null;
$(function ()
{
   autocompleteOptions = getFromGeocoder();
});

function onReRender()
{
   $("#createActivityAddressInputId").autocomplete(autocompleteOptions);
}

Затем вызывайте onReRender всякий раз, когда вы перезапускаете элемент управления.

0 голосов
/ 30 ноября 2010

Вам нужно выполнить jQuery после того, как элемент был перерисован.Или вы можете попытаться привязать событие jQuery к каждому элементу, даже если он был добавлен в DOM позже, чем jQuery (document) .ready ().

edit: изменил живой вызов метода edit: удален пример кода, потому что он был простонеправильно

...