2017-06-05 2 views
0

In unserem Projekt haben wir eine AjaxLink:Wicket AjaxLink löscht Onclick Zuhörer

<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()"; 
      } 
     }); 
    } 
} 

(Hinzufügen AjaxCallListener mit Methode getPrecondition() von onclick() Methode stoppt auf bestimmten Bedingungen ausgeführt wird, (es sollte einen Namen einer Funktion von Ihrem js zurückgeben, die boolean zurückgibt))

Dann definiere ich einen Listener für das html-Element von js (+ JQuery) und ein bestimmtes Verhalten zu, dass setzen:

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

Es funktioniert wie vorgesehen, bis das AjaxLink ausführt. Dann verschwindet mein Onclick-Listener aus irgendeinem Grund, und um es dann zum Laufen zu bringen, sollte ich es manuell binden.

Haben Sie eine Idee, warum dies (die Löschung anderer Zuhörer) geschieht und wie Sie das verhindern können?

Antwort

1

Ich denke, der Grund ist, dass die Verbindung im DOM aufgrund einiger Anrufe auf der Serverseite neu erstellt wurde. Der alte mit dem Attribut onclick wird entfernt und ein neuer erstellt.

Sie sollten stattdessen jQuery "Live" -Bindung verwenden, z. $(document).on('click', '[title]', function(evt) {showTooltip();})

Verwandte Themen