From 39f8a4c90d0753cd6614b7f596689ba9f9989e57 Mon Sep 17 00:00:00 2001 From: Igor Vaynberg Date: Fri, 27 May 2011 14:08:58 -0700 Subject: [PATCH 1/2] improve focus-out detection --- jquery.timePicker.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/jquery.timePicker.js b/jquery.timePicker.js index 41b35c1..4b2ec26 100644 --- a/jquery.timePicker.js +++ b/jquery.timePicker.js @@ -88,6 +88,17 @@ if ($tpDiv.is(":visible")) { return false; } + + var clickOutListener=function(e) { + var contains=false; + $(e.target).parents().each(function() { contains|=(this===$tpDiv.first().get()); return contains; }); + if (!contains) { + $tpDiv.hide(); + $(document).undelegate("*", "click", clickOutListener); + } + }; + $(document).delegate("*", "click", clickOutListener); + $("li", $tpDiv).removeClass(selectedClass); // Position From 8300d6317c1e0ac0a128d59566bd01a0fa050aa2 Mon Sep 17 00:00:00 2001 From: Igor Vaynberg Date: Wed, 1 Jun 2011 16:05:16 -0700 Subject: [PATCH 2/2] fix a bug where time picker would not be shown once the input was clicked after the time has been selected once --- jquery.timePicker.js | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/jquery.timePicker.js b/jquery.timePicker.js index 4b2ec26..14d226a 100644 --- a/jquery.timePicker.js +++ b/jquery.timePicker.js @@ -90,14 +90,16 @@ } var clickOutListener=function(e) { - var contains=false; + var contains=false; $(e.target).parents().each(function() { contains|=(this===$tpDiv.first().get()); return contains; }); - if (!contains) { - $tpDiv.hide(); - $(document).undelegate("*", "click", clickOutListener); + contains|=(this===elm); + if (!contains) { + hidePicker($tpDiv); } + }; - $(document).delegate("*", "click", clickOutListener); + $tpDiv.data("clickOutListener", clickOutListener); + $(document).delegate("*", "click", clickOutListener); $("li", $tpDiv).removeClass(selectedClass); @@ -131,7 +133,7 @@ // Hide timepicker on blur $(elm).blur(function() { if (!tpOver) { - $tpDiv.hide(); + hidePicker($tpDiv); } }); // Keypress doesn't repeat on Safari for non-text keys. @@ -193,7 +195,7 @@ return false; break; case 27: // Esc - $tpDiv.hide(); + hidePicker($tpDiv); return false; break; } @@ -228,6 +230,13 @@ // Private functions. + function hidePicker($tpDiv) { + var listener=$tpDiv.data("clickOutListener"); + $(document).undelegate("*", "click", listener); + $tpDiv.removeData("clickOutListener"); + $tpDiv.hide(); + } + function setTimeVal(elm, sel, $tpDiv, settings) { // Update input field elm.value = $(sel).text(); @@ -238,7 +247,7 @@ elm.focus(); } // Hide picker - $tpDiv.hide(); + hidePicker($tpDiv); } function formatTime(time, settings) {