2017-06-05 6 views
0

Dans notre projet, nous avons un AjaxLink:Wicket AjaxLink permet d'effacer les auditeurs onclick

<a title="some title.." wicket:id="addMessage">Add</a> 

Incide Page.class:

add(new AjaxLink() { 
    @Override 
    public void onClick(final AjaxRequestTarget target) { 
     //... 
    } 
    @Override 
    protected void updateAjaxAttributes(AjaxRequestAttributes attributes) { 
     attributes.getAjaxCallListeners().add(new AjaxCallListener() { 
      @Override 
      public CharSequence getPrecondition(Component component) { 
       return "return isPropagationAllowed()"; 
      } 
     }); 
    } 
} 

(Ajout AjaxCallListener avec la méthode méthode getPrecondition() arrête onclick() d'être exécuté sur certaines conditions (il devrait retourner le nom d'une fonction de votre js qui retourne booléen))

Puis je définis un écouteur pour cela élément html par js (+ JQuery) et de mettre un comportement que:

$('[title]').each((i, elem) => elem.onclick = (event) => { 
    /* ..manually open a tooltip.... */ 
}) 

Il fonctionne comme prévu jusqu'à ce AjaxLink exécute. Ensuite, mon écouteur onclick disparaît pour une raison quelconque, puis pour le faire fonctionner, je devrais lier manuellement.

Avez-vous une idée pourquoi cela se produit (l'effacement des autres auditeurs) et comment empêcher cela?

Répondre

1

Je pense que la raison est que le lien a été recréé dans le DOM en raison de certains target.add(ajaxLinkOrParent) appel sur le côté serveur. L'ancien avec l'attribut onclick est supprimé et un nouveau est créé.

Vous devez utiliser la liaison jQuery "live" à la place, par ex. $(document).on('click', '[title]', function(evt) {showTooltip();})