WICKET-4998 + WICKET-4990 removed all inline event handling, use stopImmediatePropagation() to prevent other behaviors from firing
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/acd93ba7 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/acd93ba7 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/acd93ba7 Branch: refs/heads/reference-guide Commit: acd93ba76e90f16f0c07ff46de5381a82de709d2 Parents: 68a6c04 Author: svenmeier <[email protected]> Authored: Fri Jan 25 20:09:28 2013 +0100 Committer: svenmeier <[email protected]> Committed: Fri Jan 25 20:09:28 2013 +0100 ---------------------------------------------------------------------- .../html/autocomplete/AutoCompleteTextField.java | 22 ++++++- .../html/autocomplete/wicket-autocomplete.js | 45 ++++----------- 2 files changed, 30 insertions(+), 37 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/acd93ba7/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteTextField.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteTextField.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteTextField.java index d554bdc..f821a61 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteTextField.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteTextField.java @@ -18,7 +18,9 @@ package org.apache.wicket.extensions.ajax.markup.html.autocomplete; import java.util.Iterator; +import org.apache.wicket.Component; import org.apache.wicket.ConverterLocator; +import org.apache.wicket.behavior.Behavior; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.IModel; @@ -235,9 +237,15 @@ public abstract class AutoCompleteTextField<T> extends TextField<T> }; } - /** {@inheritDoc} */ @Override - protected void onBeforeRender() + protected void onInitialize() + { + super.onInitialize(); + + initializeAutoCompleteBehavior(); + } + + private void initializeAutoCompleteBehavior() { // add auto complete behavior to this component if its not already there if (behavior == null) @@ -245,7 +253,15 @@ public abstract class AutoCompleteTextField<T> extends TextField<T> // we do this here instead of constructor so we can have an overridable factory method add(behavior = newAutoCompleteBehavior(renderer, settings)); } - super.onBeforeRender(); + } + + @Override + public Component add(Behavior... behaviors) + { + // the AutoCompleteBehavior must be bound first, see wicket-autocomplete.js + initializeAutoCompleteBehavior(); + + return super.add(behaviors); } @Override http://git-wip-us.apache.org/repos/asf/wicket/blob/acd93ba7/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js index 32bedf5..7e32cfc 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js @@ -53,13 +53,6 @@ var mouseactive=0; // is mouse selection active var hidingAutocomplete=0; // are we hiding the autocomplete list - // pointers of the browser events - var objonkeydown; - var objonkeyup; - var objonkeypress; - var objonchange; - var objonchangeoriginal; - var objonfocus; var initialElement; // holds the eventual margins, padding, etc. of the menu container. @@ -98,13 +91,6 @@ var obj = Wicket.$(elementId); initialElement = obj; - objonkeydown=obj.onkeydown; - objonkeyup=obj.onkeyup; - objonkeypress=obj.onkeypress; - objonfocus=obj.onfocus; - - objonchange=obj.onchange; - Wicket.Event.add(obj, 'blur', function (jqEvent) { if (mouseactive === 1) { ignoreOneFocusGain = true; @@ -130,10 +116,6 @@ } } ignoreOneFocusGain = false; - - if(typeof objonfocus==="function") { - return objonfocus.apply(this,[jqEvent]); - } }); Wicket.Event.add(obj, 'keydown', function (jqEvent) { @@ -180,32 +162,33 @@ hidingAutocomplete = 1; if(value) { obj.value = value; - if (typeof(objonchange) === "function") { - objonchange.apply(this,[jqEvent]); - } else { - jQuery(obj).triggerHandler('change'); - } + jQuery(obj).triggerHandler('change'); } } else if (Wicket.AutoCompleteSettings.enterHidesWithNoSelection) { hideAutoComplete(); hidingAutocomplete = 1; } mouseactive = 0; - if (typeof objonkeydown === "function") { - return objonkeydown.apply(this,[jqEvent]); - } + return true; default: } }); + Wicket.Event.add(obj, 'change', function (jqEvent) { + if (mouseactive) { + // don't let any other change handler get this + jqEvent.stopImmediatePropagation(); + } + }); + Wicket.Event.add(obj, 'inputchange', function (jqEvent) { var kc = Wicket.Event.keyCode(jqEvent); switch(kc) { case KEY_TAB: case KEY_ENTER: - return jqEvent.stopPropagation(); + return jqEvent.stopImmediatePropagation(); case KEY_UP: case KEY_DOWN: case KEY_ESC: @@ -218,22 +201,16 @@ default: updateChoices(); } - if(typeof objonkeyup === "function") { - return objonkeyup.apply(this,[jqEvent]); - } }); Wicket.Event.add(obj, 'keypress', function (jqEvent) { if(Wicket.Event.keyCode(jqEvent) === KEY_ENTER){ if(selected>-1 || hidingAutocomplete === 1){ hidingAutocomplete=0; - jqEvent.stopPropagation(); + jqEvent.stopImmediatePropagation(); return false; } } - if(typeof objonkeypress==="function") { - return objonkeypress.apply(this,[jqEvent]); - } }); if (Wicket.Focus.getFocusedElement() === obj && isShowing === true)
