Internet Explorer supports focusin and focusout events. Other browsers don't support this event, but they can be simulated with focus and blur events during capture phase.
Required changes:
With this addition you can do stuff like:Code:doAdd = function() { var ret; if (win.addEventListener) { ret = function(el, eventName, fn, capture) { if (eventName == 'mouseenter') { fn = fn.createInterceptor(checkRelatedTarget); el.addEventListener(MOUSEOVER, fn, (capture)); } else if (eventName == 'mouseleave') { fn = fn.createInterceptor(checkRelatedTarget); el.addEventListener(MOUSEOUT, fn, (capture)); } else if (eventName == 'focusin') { el.addEventListener('focus', fn, true); } else if (eventName == 'focusout') { el.addEventListener('blur', fn, true); } else { el.addEventListener(eventName, fn, (capture)); } return fn; }; } else if (win.attachEvent) { ret = function(el, eventName, fn, capture) { el.attachEvent("on" + eventName, fn); return fn; }; } else { ret = function(){}; } return ret; }(), doRemove = function(){ var ret; if (win.removeEventListener) { ret = function (el, eventName, fn, capture) { if (eventName == 'mouseenter') { eventName = MOUSEOVER; } else if (eventName == 'mouseleave') { eventName = MOUSEOUT; } else if (eventName == 'focusin') { eventName = 'focus'; capture = true; } else if (eventName == 'focusout') { eventName = 'blur'; capture = true; } el.removeEventListener(eventName, fn, (capture)); }; } else if (win.detachEvent) { ret = function (el, eventName, fn) { el.detachEvent("on" + eventName, fn); }; } else { ret = function(){}; } return ret; }();
which would solve the you-can-tab-out-of-a-modal-window problem.Code:new Ext.Window({ title: 'Window', width: 300, height: 200, modal: true, layout: 'fit', defaultButton: 'focus', items: { id: 'focus', xtype: 'textarea', value: 'Try to tab out of this window' }, listeners: { render: function(c){ var focusCmp = Ext.getCmp(c.defaultButton); var focusTask = new Ext.util.DelayedTask(focusCmp.focus, focusCmp); c.el.on({ focusin: function(e){ focusTask.cancel(); }, focusout: function(e){ focusTask.delay(10); } }); } } }).show();
Condor
Reply With Quote
