<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    IE下select width的解決方式

    開(kāi)發(fā)過(guò)程中遇到這么一個(gè)問(wèn)題有一個(gè)<select></select>的選擇框,里面有個(gè)option的值很長(zhǎng)大約128個(gè)字節(jié),那么如果我不指定select的width時(shí)候,這個(gè)框就會(huì)很長(zhǎng),但是如果我限制了width那么這個(gè)option又顯示不全,這個(gè)BUG僅僅會(huì)在IE中出現(xiàn),如何解決呢,其實(shí)可以把select的下拉框用一個(gè)層覆蓋掉,那個(gè)層會(huì)顯示完整的數(shù)據(jù),而select的widt指定好,這樣整個(gè)頁(yè)面的布局都不會(huì)被影響。所有的操作都通過(guò)JS實(shí)現(xiàn),下面我就把代碼貼出來(lái)。
    function foo(px,py,pw,ph,baseElement,fid)
    {
    var win = document.getElementById(this.fid);
    };


    function dropdown_menu_hack(el)
    {
    if(el.runtimeStyle.behavior.toLowerCase()=="none"){return;}
    el.runtimeStyle.behavior
    ="none";

    var ie5 = (document.namespaces==null);
    el.ondblclick 
    = function(e)
    {
    window.event.returnValue
    =false;
    return false;
    };

    if(window.createPopup==null)
    {

    var fid = "dropdown_menu_hack_" + Date.parse(new Date());

    window.createPopup 
    = function()
    {
    if(window.createPopup.frameWindow==null)
    {
    el.insertAdjacentHTML(
    "AfterEnd","<iframe id='"+fid+"' name='"+fid+"' src='about:blank' frameborder='1' scrolling='no'></></iframe>");
    var f = document.frames[fid];
    f.document.open();
    f.document.write(
    "<html><body></body></html>");
    f.document.close();
    f.fid 
    = fid; 


    var fwin = document.getElementById(fid);
    fwin.style.cssText
    ="position:absolute;top:0;left:0;display:none;z-index:99999;";


    f.show 
    = function(px,py,pw,ph,baseElement)

    py 
    = py + baseElement.getBoundingClientRect().top + Math.max( document.body.scrollTop, document.documentElement.scrollTop) ;
    px 
    = px + baseElement.getBoundingClientRect().left + Math.max( document.body.scrollLeft, document.documentElement.scrollLeft) ;
    fwin.style.width 
    = pw + "px";
    fwin.style.height 
    = ph + "px"
    fwin.style.posLeft 
    =px ;
    fwin.style.posTop 
    = py ; 
    fwin.style.display
    ="block"
    };


    f_hide 
    = function(e)

    if(window.event && window.event.srcElement && window.event.srcElement.tagName && window.event.srcElement.tagName.toLowerCase()=="select"){return true;}
    fwin.style.display
    ="none";
    } ;
    f.hide 
    = f_hide;
    document.attachEvent(
    "onclick",f_hide); 
    document.attachEvent(
    "onkeydown",f_hide); 

    }
    return f;
    };
    }

    function showMenu()
    {

    function selectMenu(obj,value)

    var o = document.createElement("option");
    o.value 
    = value;
    o.innerHTML 
    = value; 
    while(el.options.length>0){el.options[0].removeNode(true);}
    el.appendChild(o);
    el.title 
    = value; 
    el.contentIndex 
    = value ;
    el.value
    =value;
    //alert(value);
    //
    $("#deviceOwnerValue").val(value);
    el.menu.hide(); 



    el.menu.show(
    0 , el.offsetHeight , 1010, el); 
    var mb = el.menu.document.body;

    mb.style.cssText 
    ="border:solid 1px black;margin:0;padding:0;overflow-y:auto;overflow-x:auto;background:white;text-aligbn:center;FONT-WEIGHT: normal;FONT-SIZE: 8pt;COLOR: #003399;FONT-FAMILY: Arial;TEXT-DECORATION: none";
    var t = el.contentHTML;
    = t.replace(/<select/gi,'<ul');
    = t.replace(/<option/gi,'<li');
    = t.replace(/<\/option/gi,'</li');
    = t.replace(/<\/select/gi,'</ul');
    mb.innerHTML 
    = t; 



    el.select 
    = mb.all.tags("ul")[0];
    el.select.style.cssText
    ="list-style:none;margin:0;padding:0;";
    mb.options 
    = el.select.getElementsByTagName("li");

    for(var i=0;i<mb.options.length;i++)
    {
    mb.options[i].selectedIndex 
    = i;
    mb.options[i].style.cssText 
    = "list-style:none;margin:0;padding:1px 2px;width/**/:100%;cursor:hand;cursorointer;white-space:nowrap;FONT-WEIGHT: normal;FONT-SIZE: 8pt;COLOR: #003399;FONT-FAMILY: Arial;TEXT-DECORATION: none";
    mb.options[i].title 
    =mb.options[i].innerHTML;
    mb.options[i].innerHTML 
    =mb.options[i].innerHTML ;
    mb.options[i].onmouseover 
    = function()
    {
    if( mb.options.selected ){mb.options.selected.style.background="white";mb.options.selected.style.color="#003399";}
    mb.options.selected 
    = this;
    this.style.background="#333366";this.style.color="white";
    };

    mb.options[i].onmouseout 
    = function(){this.style.background="white";this.style.color="black";};
    mb.options[i].onmousedown 
    = function(){selectMenu(this,this.innerHTML);};
    mb.options[i].onkeydown 
    = function(){selectMenu(this,this.innerHTML);};



    if(i == el.contentIndex)
    {
    mb.options[i].style.background
    ="#333366";
    mb.options[i].style.color
    ="white"
    mb.options.selected 
    = mb.options[i];
    }
    }


    var mw = Math.max( ( el.select.offsetWidth + 22 ), el.offsetWidth + 22 );
    mw 
    = Math.max( mw, ( mb.scrollWidth+22) );
    var mh = mb.options.length * 15 + 8 ; 

    var mx = (ie5)?-3:0;
    var my = el.offsetHeight -2;
    var docH = document.documentElement.offsetHeight ;
    var bottomH = docH - el.getBoundingClientRect().bottom ; 

    mh 
    = Math.min(mh, Math.max(( docH - el.getBoundingClientRect().top - 50),100) );

    if(( bottomH < mh) )
    {

    mh 
    = Math.max( (bottomH - 12),10);
    if( mh <100 ) 
    {
    my 
    = -100 ;

    }
    mh 
    = Math.max(mh,100); 
    }


    self.focus(); 

    el.menu.show( mx , my , mw, mh , el); 
    sync
    =null;
    if(mb.options.selected)
    {
    mb.scrollTop 
    = mb.options.selected.offsetTop;
    }




    window.onresize 
    = function(){el.menu.hide()}; 
    }

    function switchMenu()
    {
    if(event.keyCode)
    {
    if(event.keyCode==40){ el.contentIndex++ ;}
    else if(event.keyCode==38){ el.contentIndex--; }
    }
    else if(event.wheelDelta )
    {
    if (event.wheelDelta >= 120)
    el.contentIndex
    ++ ;
    else if (event.wheelDelta <= -120)
    el.contentIndex
    -- ;
    }
    else{return true;}




    if( el.contentIndex > (el.contentOptions.length-1) ){ el.contentIndex =0;}
    else if (el.contentIndex<0){el.contentIndex = el.contentOptions.length-1 ;}

    var o = document.createElement("option");
    o.value 
    = el.contentOptions[el.contentIndex].value;
    o.innerHTML 
    = el.contentOptions[el.contentIndex].text;
    while(el.options.length>0){el.options[0].removeNode(true);}
    el.appendChild(o);
    el.title 
    = o.innerHTML; 
    }

    if(dropdown_menu_hack.menu ==null)
    {
    dropdown_menu_hack.menu 
    = window.createPopup();
    document.attachEvent(
    "onkeydown",dropdown_menu_hack.menu.hide);
    }
    el.menu 
    = dropdown_menu_hack.menu ;
    el.contentOptions 
    = new Array();
    el.contentIndex 
    = el.selectedIndex;
    el.contentHTML 
    = el.outerHTML;

    for(var i=0;i<el.options.length;i++)

    el.contentOptions [el.contentOptions.length] 
    = 
    {
    "value": el.options[i].value,
    "text": el.options[i].innerHTML
    };

    if(!el.options[i].selected){el.options[i].removeNode(true);i--;};
    }


    el.onkeydown 
    = switchMenu;
    el.onclick 
    = showMenu;
    el.onmousewheel
    = switchMenu;

    }
    JS代碼就是這些,在單擊,下拉和鼠標(biāo)滾輪操作時(shí),響應(yīng)相關(guān)的函數(shù),在頁(yè)面里面需要在需要這樣用的元素中加入onfocus="window.dropdown_menu_hack(this)"這么一句就OK了,下面是代碼,我用的struts2的標(biāo)簽,記得一定要用層將你要改的select包裹起來(lái)
    <div id="pri">
                                                        
    <s:select name="deviceOwnedBy" id="deviceOwnedBy" list="deviceOwnedByList" listKey="value" listValue="value" headerKey="" headerValue="" cssClass="selectbox"  style="width:150px;FONT-WEIGHT: normal;FONT-SIZE: 8pt;COLOR: #003399;FONT-FAMILY: Arial;TEXT-DECORATION: none" onfocus="window.dropdown_menu_hack(this)"></s:select>
                                                    
    </div>    



    posted on 2010-05-25 11:57 Cloud kensin 閱讀(2023) 評(píng)論(3)  編輯  收藏 所屬分類: 其他

    評(píng)論

    # re: IE下select width的解決方式 2014-04-02 17:21 蒼天在上

    你好,我最近正好碰到一個(gè)ie8下的select問(wèn)題,用的你的方法解決了,但是,select的級(jí)聯(lián)卻無(wú)法進(jìn)行,請(qǐng)問(wèn)你了解嗎?謝謝  回復(fù)  更多評(píng)論   

    # re: IE下select width的解決方式 2014-04-06 21:17 xinta

    @蒼天在上
    你如果要級(jí)聯(lián)的話就麻煩了,得通過(guò)onselect事件來(lái)觸發(fā)你要級(jí)聯(lián)select的選擇  回復(fù)  更多評(píng)論   

    # re: IE下select width的解決方式 2014-06-16 14:54 zzz

    能說(shuō)的具體些嗎?我也碰到了@xinta
      回復(fù)  更多評(píng)論   

    <2014年4月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(4)

    隨筆分類

    相冊(cè)

    相冊(cè)

    搜索

    最新評(píng)論

    主站蜘蛛池模板: 亚洲国产综合人成综合网站00| 免费成人av电影| 亚洲丁香色婷婷综合欲色啪| 男女啪啪免费体验区| 免费国产一级特黄久久| 亚洲AV无码国产剧情| 成人人免费夜夜视频观看| 亚洲日本乱码卡2卡3卡新区| 最近中文字幕mv免费高清电影 | 免费在线观看视频网站| 亚洲韩国在线一卡二卡| 国产精品成人观看视频免费| 亚洲一区在线视频| 日韩电影免费在线| 国产成人无码免费网站| 亚洲精品夜夜夜妓女网| 亚洲毛片免费观看| 中文字幕亚洲情99在线| 成人亚洲网站www在线观看| 国产线视频精品免费观看视频| 久久精品国产亚洲av麻豆| 久久精品国产免费观看三人同眠| 亚洲无码一区二区三区 | 永久免费av无码网站yy| 99久久亚洲综合精品成人网| 国产免费看JIZZ视频| 国产亚洲视频在线播放大全| 伊人婷婷综合缴情亚洲五月| 99re在线这里只有精品免费| 亚洲精品二三区伊人久久| 免费jjzz在在线播放国产| 国产一精品一av一免费爽爽| 亚洲人成电影在线观看青青| 全黄a免费一级毛片人人爱| 国产精品免费AV片在线观看| 亚洲综合色婷婷在线观看| 国内精品99亚洲免费高清| 美女视频黄a视频全免费| 牛牛在线精品观看免费正| 精品亚洲aⅴ在线观看| 国产精品自在自线免费观看|