WICKET-4689 Javascript timers not removed when a Component is replaced by ajax


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/731ef49d
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/731ef49d
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/731ef49d

Branch: refs/heads/master
Commit: 731ef49d64f653ad9113022e6464924a36f5d8d8
Parents: e7b5bcf
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Thu Aug 2 12:03:38 2012 +0300
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Thu Aug 2 12:03:38 2012 +0300

----------------------------------------------------------------------
 .../wicket/ajax/res/js/wicket-ajax-jquery.js       |   17 +++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/731ef49d/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js 
b/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js
index fb6f14f..21bcb1d 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js
+++ 
b/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js
@@ -2487,11 +2487,28 @@
 
        /**
         * Remove any scheduled timers on the removed element.
+        * This wont remove the timer for elements which are children of the 
removed one.
         */
        Wicket.Event.subscribe('/dom/node/removing', function(jqEvent, element) 
{
                var id = element.id;
                if (Wicket.TimerHandles && Wicket.TimerHandles[id]) {
                        window.clearTimeout(Wicket.TimerHandles[id]);
+                       delete Wicket.TimerHandles[id];
+               }
+       });
+
+       /**
+        * Remove any scheduled timers on elements which are no more in the DOM 
document.
+        * This removes the timers for all elements which parents have been 
removed from the DOM.
+        */
+       Wicket.Event.subscribe('/dom/node/added', function() {
+               if (Wicket.TimerHandles) {
+                       for (var timerHandle in Wicket.TimerHandles) {
+                               if (Wicket.$$(timerHandle) === false) {
+                                       window.clearTimeout(timerHandle);
+                                       delete Wicket.TimerHandles[timerHandle];
+                               }
+                       }
                }
        });
 

Reply via email to