【问题标题】:jquery autocomplete does not work for rerendered textfieldsjquery 自动完成功能不适用于重新渲染的文本字段
【发布时间】:2010-11-29 22:15:32
【问题描述】:

我在让 jequery 自动完成功能适用于重新渲染的文本字段时遇到问题。

我有一个 a4j:commandlink 来在我的表单中显示更多输入字段,当单击它时,我重新渲染一个外部 a4j:outputpanel 来重新渲染内容。但令我惊讶的是,jQuery 自动完成事件从未为我拥有的重新渲染文本字段触发。它在重新渲染之前按预期工作。文本字段根据其 ID 自动完成,来自谷歌地图,如下所示:

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>

我在想这可能与自动完成事件与文档加载有关,还是我离这里很远?

谢谢!

【问题讨论】:

    标签: jquery jsf richfaces


    【解决方案1】:

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

    类似:

    var autocompleteOptions = null;
    $(function ()
    {
       autocompleteOptions = getFromGeocoder();
    });
    
    function onReRender()
    {
       $("#createActivityAddressInputId").autocomplete(autocompleteOptions);
    }
    

    然后在重新渲染控件时调用onReRender

    【讨论】:

      【解决方案2】:

      你需要在元素被重新渲染后执行你的 jQuery。或者您可以尝试在每个元素上绑定 jQuery 事件,即使添加到 DOM 的时间晚于 jQuery(document).ready()。

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

      【讨论】:

      • 什么?这没有任何意义;您要实时绑定什么活动?您已将live 的第一个参数省略。
      • @Domenic:错过了。修复。它现在可能也行不通。无论哪种方式,只是一个想法。
      猜你喜欢
      • 2023-03-27
      • 2014-01-16
      • 2018-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 2011-10-16
      • 1970-01-01
      相关资源
      最近更新 更多