Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- YAHOO.namespace( 'YAHOO.Hack' ).FixIESelectWidth = new function()
- {
- var oSelf = this;
- var YUE = YAHOO.util.Event;
- var YUD = YAHOO.util.Dom;
- var oTimer = {};
- var oAnim = {};
- var nTimerId = 0 ;
- var dLastFocalItem;
- var ie7 = !!(document.uniqueID && typeof(XMLHttpRequest)!='undefined' )
- function init(el)
- {
- el = el || this;
- if( el.tagName.toLowerCase() != 'select')
- {
- throw Error('element [' + el.id + '] is not <select>');
- return;
- };
- if(!YUD.hasClass( el.parentNode, 'select-box'))
- {
- throw Error('className select-box is not included for element [' + el.id + ']');
- return;
- };
- var oRs = el.runtimeStyle;
- var oPRs = el.parentNode.runtimeStyle;
- oPRs.fonSize = 0;
- var sDisplay = el.parentNode.currentStyle.display.toLowerCase() ;
- if( sDisplay=='' || sDisplay=='inline' || sDisplay=='inline-block' )
- {
- oPRs.display = 'inline-block';
- oPRs.width = el.offsetWidth + 'px';
- oPRs.height =el.offsetHeight + 'px';
- oPRs.position = 'relative';
- oRs.position = 'absolute';
- oRs.top = 0;
- oRs.left = 0;
- };
- el._timerId = ( nTimerId+=1 );
- el.selectedIndex = Math.max( 0 , el.selectedIndex );
- oTimer[ '_' + el._timerId ] = setTimeout('void(0)',0);
- oAnim [ 'A' + el._timerId ] = setTimeout('void(0)',0);
- YUE.on( el, 'mouseover' , onMouseOver);
- YUE.on( document, 'mousedown' ,onMouseDown , el, true);
- YUE.on( el, 'change' ,collapseSelect , el, true);
- }
- function collapseSelect(e)
- {
- status++;
- this.runtimeStyle.width = '';
- }
- function onMouseOver(e )
- {
- var el = this;
- if(dLastFocalItem && dLastFocalItem !=el)
- {
- onMouseDown.call( dLastFocalItem , e );
- };
- var sTimerId ='_' + el._timerId ;
- var sAniId = 'A' + el._timerId ;
- clearTimeout( oTimer[ sTimerId ] );
- var onTween = function()
- {
- clearTimeout( oAnim [ sAniId ] );
- if( Math.abs( nEndWidth - nStartWidth ) > 3 )
- {
- nStartWidth += (nEndWidth - nStartWidth ) /3;
- el.runtimeStyle.width = nStartWidth + 'px';
- oAnim [ sAniId ] = setTimeout( onTween ,0 );
- }
- else
- {
- el.runtimeStyle.width = 'auto';
- el.selectedIndex = Math.max( 0 , el.selectedIndex );
- }
- }
- var nStartWidth = el.offsetWidth ;
- el.runtimeStyle.width = 'auto';
- var nEndWidth = el.offsetWidth;
- clearTimeout( oAnim [ sAniId ] );
- onTween();
- el.focus();
- dLastFocalItem = el;
- }
- function onMouseDown(e , el )
- {
- el = ( e.srcElement || e.target );
- if( el == this && e.type!='mouseover' )
- {
- status++;
- YUE.stopEvent(e);
- return false;
- };
- el = this;
- clearTimeout( oAnim [ 'A' + el._timerId ] );
- var sTimerId ='_' + el._timerId ;
- var doItLater = function()
- {
- el.runtimeStyle.width = '';
- };
- if( e.type=='mouseover')
- { doItLater();}
- else{
- oTimer[ sTimerId ] = setTimeout(doItLater,100);
- }
- }
- function constructor(sId)
- {
- sId = [ sId , ''].join('');
- //Only fix for IE55 ~ IE7
- if(document.uniqueID && window.createPopup )
- {
- YUE.onAvailable(sId ,init );
- return true;
- }else{return false};
- };
- return constructor;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement