2016-05-25 9 views
1

Ich habe Textbox und Methode, die zwei Ereignisse abhört.ZK Wie behandelt man mehrere Ereignisse?

<textbox id="test" /> 

@Listen("onOK = #test; onBlur = #test") 
public void action(Event event) { 
    // do something ... 
} 

Wenn ich in der Textbox die Eingabetaste drücke, wird das Ereignis "onOK" ausgelöst. Es ist in Ordnung. Aber dann, wenn ich den Fokus von der Texbox verliere, wird auch das Ereignis "onBlur" ausgelöst. Es ist schlecht, denn in diesem Fall wird meine Methode "Aktion" zweimal aufgerufen. Wie kann ich diese zweite Veranstaltung absagen?

Antwort

1

Sie jede Veranstaltung zu einem anderen Ereignis weiterleiten könnte:

I created a fiddle where you can test it.

Aber einige explication:
Im zul:

<textbox id="test" forward="onOK=test.onBlur"/> 

Was sagt, dass die ONOK zu onBlur weitergeleitet wird, und es wird ein onBlur später sein.

In Java-Code:

@Listen("onBlur = #test") 
public void action(Event event) { 
    Clients.showNotification(event.getName() + " " + ++counter); 
} 

So, jetzt haben wir nur für die onBlur hören, weil ONOK zum onBlur weitergeleitet wird.

Wird dies Ihre Fall atm helfen, noch nicht.

Kein Aufruf des Ereignisses => nicht möglich, wenn Sie es deklarieren, wird es ausgelöst.
Aber wie können Sie mit Ihrer Situation umgehen:

Halten Sie die Zeichenfolge in Ihrem Composer, und überprüfen Sie es mit dem neuen Wert.
Wenn es gleich ist => das Ereignis ist bereits ausgelöst, oder es gibt keine Änderungen.
Wenn es nicht gleich ist => mach deine Sachen.

+0

Um zu überprüfen, ob der Wert geändert wurde, ist die beste Lösung. Vielen Dank. – Andrii

1

Wenn Sie nicht brauchen, dass das Ereignis ausgelöst werden, wenn das Textfeld den Fokus verliert, dann müssen Sie den onBlur Teil löschen:

@Listen("onOK = #test") 
public void action(Event event) { 
    // do something ... 
} 

das ist, weil in Ihrem Code Sie tun mit der Anotation @listen, dass jedes Mal, wenn in der Textbox mit ID = "Test" eines dieser Ereignisse gemacht werden: ein onOk oder onBlur (das ist der Auslöser, wenn der Fokus verloren ist), dann wird die Methode action ausgeführt.

aktualisieren

Nun, wenn Sie brauchen, dass das Textfeld ein Ereignis mit onOK auslösen, aber einem anderen, wenn verliert den Fokus (onBlur) dann natürlich müssen Sie zwei diferent Methoden und setzen Sie den listen Tag in beide aber mit seinem eigenes Verhalten und Bedingungen, wie folgt aus:

@Listen("onOK = #test") 
public void action(Event event) { 
    // do something when Ok... 
} 

@Listen("onBlur = #test") 
public void anotherAction(Event event) { 
    // do something when loses focus... 
} 
+0

Ich brauche diese beiden Ereignisse 'onOK' und' onBlur'. Und sie müssen eine Methode aufrufen (mit den gleichen Aktionen). Wenn ich etwas in 'textbox' getippt habe und dann den Fokus verliere, wird das Ereignis' onBlur' ausgelöst. Es ist okay ! Aber wenn ich als erstes Enter drücke und "onOK" danach treggeriere, brauche ich das 'onBlur' Event nicht zu treggerieren. – Andrii

Verwandte Themen