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]; + } + } } });
