2010-11-29 24 views
0

Je n'arrive pas à faire en sorte que la saisie semi-automatique de la jequery fonctionne pour les champs de texte redéfinis.La saisie semi-automatique de jquery ne fonctionne pas pour les champs de texte redéfinis

J'ai un lien de commande a4j: pour montrer plus de champs d'entrée dans mon formulaire, quand cela est cliqué, je reRender un panneau de sortie externe a4j: reRender le contenu. Mais à ma grande surprise, l'événement de saisie semi-automatique jQuery n'est jamais déclenché pour un champ de texte reRendered que j'ai. Il fonctionne comme prévu avant le reRender. Le champ de texte se autocomplete en fonction de son identifiant, de google maps comme ceci:

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> 

Je pensais que cela avait peut-être quelque chose à voir avec l'événement autocomplete est accroché sur le document charge, ou suis-je loin ici?

Merci!

Répondre

1

Oui; vous devrez réattacher la saisie semi-automatique en appelant la même méthode chaque fois que vous effectuez un nouveau rendu. (On peut supposer que vous mettre en cache les options que vous passez à autocomplete.)

Quelque chose comme:

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

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

appellent alors onReRender chaque fois que vous rerender le contrôle.

-1

Vous devez exécuter votre jQuery après que l'élément a été relancé. Ou vous pouvez essayer de lier l'événement jQuery sur chaque élément même s'il est ajouté au DOM plus tard que jQuery (document) .ready().

modifier: changé l'appel de méthode en direct modifier: exemple de code supprimé, car il était mal

+0

Quoi? Cela n'a aucun sens; À quel événement êtes-vous lié? Vous avez omis le premier paramètre à 'live'. – Domenic

+0

@Domenic: raté cela. Je l'ai réparé. Et ça ne marcherait probablement pas non plus maintenant. De toute façon, juste un peu. – skajfes

+0

yup, 'live' ne fonctionne pas avec les événements' load'. – Domenic