I'm not sure if it's just a cosmetic effect, but I agree with you. I
will investigate a little bit more. If this is the case, I will replace
'setTimeout' with jquery fadeout.
On 21/07/2015 11:54, Elger van Boxtel wrote:
That solution would work as well, but why would we need the delay of 500 ms to
hide the autosuggest box? Is that a pure cosmetic solution or does it add any
functionality?
I'd rather remove the setTimeout if we do not need it then adding a change
event trigger and setting 2 flags to avoid triggering the change event again.
That just doesn't feel right...
-----Original Message-----
From: andrea del bene [mailto:[email protected]]
Sent: Tuesday, July 21, 2015 10:40
To: [email protected]
Subject: Re: Autocomplete event flow bug
Hi,
I'd rather trigger 'change' event before calling
'window.setTimeout(hideAutoComplete, 500);'. To avoid 'change' to be called
twice, we can set flag 'triggerChangeOnHide = false' and 'visible = 0 '
On 20/07/2015 16:58, Elger van Boxtel wrote:
Hi All,
I'm having a problem with the current implementation of the
autocomplete. Let me explain first:
I have a form with a autocomplete field (AutoCompleteBehavior) and a
saveAjaxButtonon it. Apart from this, this field has a onchange
AjaxEventBehaviourto do some validation on the backend and possibly
make some changes to the field.
When I fill in the field and without leaving the field (and thus no
blur event has been triggered yet) I click on the save AjaxButton.
What I'd expect to happen is the following event flow:
-*blur*: the field has been blurred
-*change*: the field has been changed
-*click*: the click on the save button
Instead this is what happens:
-*blur*
-*click*
-*change*
Further investigation tells me that this is because of the
wicket-autocomplete.jsimplementation for the blurevent handler.
wicket-autocomplete.js can be found
on:\wicket-head\wicket\wicket-extensions\src\main\java\org\apache\wick
et\extensions\ajax\markup\html\autocomplete
On line 91 the blur event hander can be found:
Wicket.Event.add(obj, 'blur', function (jqEvent) {
window.setTimeout(hideAutoComplete, 500);
});
This wraps the hideAutoCompletefield in a setTimeoutof 500 ms. In the
hideAutoComplete, the changeevent is triggered (line 438).
The setTimout call causes the change event to be executed after the
click event, leaving me with a partially saved form.
To fix this, I could remove the setTimeoutfunctionality from the
blurevent handler. This will call hideAutoCompleteimmediately. This
change will cause the autocomplete dialog to be closed immediately and
leaving us with the right event stack. I've not noticed any other side
effects.
I have a patch ready, but I'd like to have your thoughts on this. When
necessary, I can create an issue on https://issues.apache.org and send
a pull request.
All code has been taken from latest greatest Wicket on Github.
With kind regards,
Elger van Boxtel
Agile Developer
--------------------
*Planon B.V.*
Postbus 38074
6503 AB Nijmegen
Wijchenseweg 8
6537 TL Nijmegen
Nederland
T: +31 (0) 24 750 7727
F: +31 (0) 24 642 2942
*E*: [email protected] <mailto:[email protected]>
*W*: www.planon.nl <http://www.planon.nl/>
*W*: http://elgervanboxtel.nl
*LN*: LinkedIn <https://nl.linkedin.com/in/elgervanboxtel>
*GH:* GitHub <https://github.com/elgervb>_
This e-mail and any attachment is for authorized use by the intended
recipient(s) only. It may contain proprietary material, confidential
information and/or be subject to legal privilege. It should not be
copied, disclosed to, retained or used by, any other party. If you are
not an intended recipient then please promptly delete this e-mail and
any attachment and all copies and inform the sender.
***Please consider the environment before printing this e-mail*.