Changeset 11084

Show
Ignore:
Timestamp:
10/23/07 13:14:41 (9 months ago)
Author:
bill
Message:

Refs #4809: fix focus issues on IE

Location:
dijit/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • dijit/trunk/form/Slider.js

    r10960 r11084  
    8484        _onHandleClick: function(e){ 
    8585                if(this.disabled){ return; } 
    86                 dijit.focus(this.sliderHandle); 
     86                if(!dojo.isIE){ 
     87                        // make sure you get focus when dragging the handle 
     88                        // (but don't do on IE because it causes a flicker on mouse up (due to blur then focus) 
     89                        dijit.focus(this.sliderHandle); 
     90                } 
    8791                dojo.stopEvent(e); 
    8892        }, 
  • dijit/trunk/_base/focus.js

    r11074 r11084  
    190190                                        } 
    191191                                }); 
    192                                 body.attachEvent('ondeactivate', function(evt){ dijit._onBlurNode(); }); 
     192                                body.attachEvent('ondeactivate', function(evt){ dijit._onBlurNode(evt.srcElement); }); 
    193193                        }else{ 
    194194                                body.addEventListener('focus', function(evt){ dijit._onFocusNode(evt.target); }, true); 
    195                                 body.addEventListener('blur', function(evt){ dijit._onBlurNode(); }, true); 
     195                                body.addEventListener('blur', function(evt){ dijit._onBlurNode(evt.target); }, true); 
    196196                        } 
    197197                } 
     
    199199        }, 
    200200 
    201         _onBlurNode: function(){ 
     201        _onBlurNode: function(/*DomNode*/ node){ 
    202202                // summary: 
    203203                //              Called when focus leaves a node. 
     
    205205                //              which indicates that we tabbed off the last field on the page, 
    206206                //              in which case every widget is marked inactive 
    207  
    208207                dijit._prevFocus = dijit._curFocus; 
    209208                dijit._curFocus = null; 
     209 
     210                var w = dijit.getEnclosingWidget(node); 
     211                if (w && w._setStateClass){ 
     212                        w._focused = false; 
     213                        w._setStateClass(); 
     214                } 
    210215                if(dijit._justMouseDowned){ 
    211216                        // the mouse down caused a new widget to be marked as active; this blur event 
     
    277282                        w._focused = true; 
    278283                        w._setStateClass(); 
    279                         // watch for a blur on the node that received focus 
    280                         var blurConnector = dojo.connect(node, "onblur", function(){ 
    281                                 w._focused = false; 
    282                                 w._setStateClass(); 
    283                                 if(node==dijit._curFocus){ dijit._curFocus = null; } // so that node!=dijit._curFocus 
    284                                 dojo.disconnect(blurConnector); 
    285                         }); 
    286284                } 
    287285        },