2010-11-29 96 views
0

我有一个问题,让jequery自动完成为重新显示的文本框工作。jquery自动完成不适用于重新显示的文本框

我有一个a4j:commandlink在我的表单中显示一些更多的输入字段,当它被点击时我reRender一个外部的a4j:输出面板reRender的内容。但令我惊讶的是,jQuery自动完成事件从未被解雇,因为我有一个reRendered文本框。它在reRender之前按预期工作。该文本框获得自动完成基于其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> 

我在想,这也许有一些东西需要与自动完成事件挂钩的文档加载,还是我在这里下车呢?

谢谢!

回答

1

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

喜欢的东西:

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

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

然后调用onReRender每当你重新描绘的控制。

-1

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

编辑: 改变了现场方法调用 编辑: 移除代码示例,因为这是不对的

+0

什么?这没有道理;你活着绑定什么事件?你已经省略了第一个参数来生活。 – Domenic 2010-11-29 22:25:56