jquery自动完成功能不适用于重新渲染的文本字段

时间:2010-11-29 22:15:32

标签: jquery jsf richfaces

我遇到问题,让jequery自动完成工作为重新渲染的文本字段。

我有一个a4j:commandlink来显示我的表单中的更多输入字段,当点击它时,我reRender外部a4j:outputpanel来reRender内容。但令我惊讶的是,jQuery自动完成事件从未针对我拥有的reRendered文本字段触发。它在reRender之前按预期工作。文本字段根据其ID来自动完成,来自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 个答案:

答案 0 :(得分:1)

是;每次重新渲染时,都需要通过调用相同的方法重新附加自动完成。 (可能您会缓存传递给自动完成的选项。)

类似的东西:

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

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

每当您重新渲染控件时,请致电onReRender

答案 1 :(得分:-1)

您需要在重新生成元素后执行jQuery。或者你可以尝试在每个元素上绑定jQuery事件,即使在jQuery(document).ready()之后添加到DOM。

编辑: 改变了实时方法调用 编辑: 删除代码示例,因为它只是错误的