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..b0c9ef8 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,11 +44,25 @@ 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'); - }, 120); + if (scrollFlag === false) { + return trigger.trigger('close'); + } + }, 333); } }); trigger.on('close', function() {