欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

javascript代码实现可编辑下拉框

程序员文章站 2022-04-25 19:55:40
javascript之可编辑下拉框 html里的select box只能下拉选择,是不可以编辑的,本范例实现了一个既可以编辑又可以下拉的select box,在很多项目中能够用到。 看看效果图:...

javascript之可编辑下拉框

html里的select box只能下拉选择,是不可以编辑的,本范例实现了一个既可以编辑又可以下拉的select box,在很多项目中能够用到。

看看效果图:

javascript代码实现可编辑下拉框

如图可以实现编辑下拉框,实现既有文本框功能又有下拉框功能。

就是input控件基础上添加可选项

<input type="text" name="mytext" value="norway" selectboxoptions="canada;denmark;finland;germany;mexico;norway;sweden;united kingdom;united states">  

js实现:

function createeditableselect(dest)  
    {  
  
        dest.classname='selectboxinput';          
        var p = document.createelement('div');  
        p.style.stylefloat = 'left';  
        p.style.width = dest.offsetwidth + 16 + 'px';  
        p.style.position = 'relative';  
        p.id = 'selectbox' + selectboxids;  
        var parent = dest.parentnode;  
        parent.insertbefore(p,dest);  
        p.appendchild(dest);    
        p.classname='selectbox';  
        p.style.zindex = 10000 - selectboxids;  
  
        var img = document.createelement('img');  
        img.src = arrowimage;  
        img.classname = 'selectboxarrow';  
          
        img.onmouseover = selectbox_switchimageurl;  
        img.onmouseout = selectbox_switchimageurl;  
        img.onclick = selectbox_showoptions;  
        img.id = 'arrowselectbox' + selectboxids;  
  
        p.appendchild(img);  
          
        var optiondiv = document.createelement('div');  
        optiondiv.id = 'selectboxoptions' + selectboxids;  
        optiondiv.classname='selectboxoptioncontainer';  
        optiondiv.style.width = p.offsetwidth-2 + 'px';  
        p.appendchild(optiondiv);  
          
        if(navigator.useragent.indexof('msie')>=0){  
            var iframe = document.createelement('<iframe src="about:blank" frameborder=0>');  
            iframe.style.width = optiondiv.style.width;  
            iframe.style.height = optiondiv.offsetheight + 'px';  
            iframe.style.display='none';  
            iframe.id = 'selectboxiframe' + selectboxids;  
            p.appendchild(iframe);  
        }  
          
        if(dest.getattribute('selectboxoptions')){  
            var options = dest.getattribute('selectboxoptions').split(';');  
            var optionstotalheight = 0;  
            var optionarray = new array();  
            for(var no=0;no<options.length;no++){  
                var anoption = document.createelement('div');  
                anoption.innerhtml = options[no];  
                anoption.classname='selectboxanoption';  
                anoption.onclick = selectoptionvalue;  
                anoption.style.width = optiondiv.style.width.replace('px','') - 2 + 'px';   
                anoption.onmouseover = highlightselectboxoption;  
                optiondiv.appendchild(anoption);      
                optionstotalheight = optionstotalheight + anoption.offsetheight;  
                optionarray.push(anoption);  
            }  
            if(optionstotalheight > optiondiv.offsetheight){               
                for(var no=0;no<optionarray.length;no++){  
                    optionarray[no].style.width = optiondiv.style.width.replace('px','') - 22 + 'px';     
                }     
            }         
            optiondiv.style.display='none';  
            optiondiv.style.visibility='visible';  
        }  
          
        selectboxids = selectboxids + 1;  
    }