From 87d0b410d3af61f5f297936418f9f88e1d0f9870 Mon Sep 17 00:00:00 2001 From: Brandon Aaron Date: Fri, 18 Oct 2013 17:01:20 -0500 Subject: [PATCH 1/2] a fix for scrolling long option lists --- fancySelect.coffee | 15 ++++++++++++++- fancySelect.js | 18 ++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/fancySelect.coffee b/fancySelect.coffee index 5596599..300f1ab 100644 --- a/fancySelect.coffee +++ b/fancySelect.coffee @@ -43,10 +43,23 @@ $.fn.fancySelect = (opts) -> #TODO change to `[selected]`? is this reliable? trigger.text sel.find(':selected').text() + # deal with scrolling long option lists + scrollFlag = false + scrollTimeout = false + options.on 'scroll', -> + scrollFlag = true + if scrollTimeout + clearTimeout(scrollTimeout) + scrollTimeout = setTimeout -> + scrollFlag = false + sel.focus() + , 120 + sel.on 'blur', -> if trigger.hasClass 'open' setTimeout -> - trigger.trigger 'close' + if scrollFlag == false + trigger.trigger 'close' , 120 trigger.on 'close', -> diff --git a/fancySelect.js b/fancySelect.js index 86142a1..89d42f6 100644 --- a/fancySelect.js +++ b/fancySelect.js @@ -11,7 +11,7 @@ }, opts); isiOS = !!navigator.userAgent.match(/iP(hone|od|ad)/i); return this.each(function() { - var copyOptionsToList, disabled, options, sel, trigger, updateTriggerText, wrapper; + var copyOptionsToList, disabled, options, scrollFlag, scrollTimeout, sel, trigger, updateTriggerText, wrapper; sel = $(this); if (sel.hasClass('fancified') || sel[0].tagName !== 'SELECT') { return; @@ -44,10 +44,24 @@ updateTriggerText = function() { return trigger.text(sel.find(':selected').text()); }; + scrollFlag = false; + scrollTimeout = false; + options.on('scroll', function() { + scrollFlag = true; + if (scrollTimeout) { + clearTimeout(scrollTimeout); + } + return scrollTimeout = setTimeout(function() { + scrollFlag = false; + return sel.focus(); + }, 120); + }); sel.on('blur', function() { if (trigger.hasClass('open')) { return setTimeout(function() { - return trigger.trigger('close'); + if (scrollFlag === false) { + return trigger.trigger('close'); + } }, 120); } }); From 23cc02c4e24b875cd5c938432624b17cc013848d Mon Sep 17 00:00:00 2001 From: Brandon Aaron Date: Thu, 24 Oct 2013 15:34:46 -0500 Subject: [PATCH 2/2] increase the timeout for the blur to happen to allow for more time to grab the scrollbar and cause a scroll event to happen --- fancySelect.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fancySelect.js b/fancySelect.js index 89d42f6..b0c9ef8 100644 --- a/fancySelect.js +++ b/fancySelect.js @@ -62,7 +62,7 @@ if (scrollFlag === false) { return trigger.trigger('close'); } - }, 120); + }, 333); } }); trigger.on('close', function() {