实现类似IE地址栏功能的控件。我们想在html网页中实现类似 IE 地址栏http输入下拉框类似的控件,条件如下:1. 一个主要网页是 html 格式的,其中可以采用 Java Script 来实现。
2. 可以采用类似 Combobox控件的功能,具有“输入”和“选择”的功能。
3. 类似IE地址栏的输入框,输入一个网页地址或者任意字符串后,自动记忆到 IE 的cookies中或者其它设置中,可以通过IE清楚掉。
4. 在没有通过IE清楚之前,每次打开此html网页,把此前使用过的的相关地址都显示在combobox的下拉框条目之中,在input框中可以自动筛选。
5. 要求用html中的输入框和选择框组合实现,如有其它方案也可以考虑。

解决方案 »

  1.   

    5.比较好处理,问题是3和4,cookies是不能存储太多东西的,而且数量也有限。
      

  2.   

    使用绝对位置,让输入域和选择域重合,把选择域剪裁,一直使用输入域的值,如果选择域变了,就把选择域的值付给输入域,参考代码如下:
    <html>
    <head>
    <script language="javascript">
    function selectChange()
    {
    document.all.text.value = document.all.select.value;
    }
    </script>
    </head>
    <body>
    <div>
    <select id='select' style="position:absolute;width:150px;clip: rect(0 180 110 130)" onchange="selectChange()">
    <option value='1'> 1 </option>
    <option value='2'> 2 </option>
    <option value='3'> 3 </option>
    <option value='4'> 4 </option>
    </select>
    <input type='text' id='text'style="position:absolute;width:150px;" value="1" onfocus="this.value='';document.all.select.value='';">
    </div>
    </body>
    </html>
      

  3.   

    网上找到一份代码,你看看能不能有办法?combobox.htc
    <public:component tagname="ComboBox" literalcontent="true">
    <public:method name="CreateComboBox" internalname="f_PublicCreateComboBox" />
    <public:method name="CreateComboBoxIpt" internalname="f_PublicCreateComboBoxIpt" />
    <public:method name="CreateDropDown" internalname="f_PublicCreateDropDown" />
    <public:method name="CreateDropList" internalname="f_PublicCreateDropList" />
    <public:method name="CreatePopup" internalname="f_PublicCreatePopup" /><public:attach event="oncontentready" onevent="f_CreateComboBox()" />
    <SCRIPT LANGUAGE="JScript">
    var oPopup = null;
    var ComboBox = null;
    var ComboBoxIpt = null;
    var DropDown = null;
    var DropList = null;
    var aNodes = new Array();
    function f_CreateComboBox()
    {
    aNodes = f_CreateNodes(element.innerHTML);
    DropList = f_PublicCreateDropList();
    f_PublicCreateDropListData(aNodes);
    ComboBox = f_PublicCreateComboBox();
    ComboBoxIpt = f_PublicCreateComboBoxIpt();
    DropDown = f_PublicCreateDropDown();
    oPopup = f_PublicCreatePopup()
    ComboBox.attachEvent("onmouseover",fnMouseover);
    ComboBox.attachEvent("onmouseout",fnMouseout);
    DropDown.attachEvent("onmousedown",fnMousedown);
    ComboBoxIpt.attachEvent("onfocus",ComboBoxFocus);
    ComboBoxIpt.attachEvent("onblur",ComboBoxBlur);
    ComboBoxIpt.attachEvent("onkeyup",ComboBoxKeyup);
    window.document.attachEvent("onclick", chkstat);
    }
    function f_PublicCreateComboBox()
    {
    var oTable = window.document.createElement("TABLE");
    oTable.cellSpacing = 1;
    oTable.cellPadding = 0;
    oTable.id = "AXTeamComboBox"+uniqueID;
    oTable.style.display = "inline";
    oTable.border = 0;
    oTable.bgColor = "#FFFFFF";
    element.insertAdjacentElement("BeforeBegin",oTable);
    oTable.ComboBoxFocus = false;
    return oTable;
    }
    function f_PublicCreateComboBoxIpt()
    {
    var oInput = window.document.createElement("INPUT");
    oInput.type = "text";
    oInput.style.border = 0;
    oInput.style.width = element.width;
    oInput.style.height = 15;
    oInput.id = "AXTeamComboBoxIpt"+uniqueID;
    ComboBox.insertRow().insertCell().appendChild(oInput);
    ComboBox.rows[0].bgColor = "#FFFFFF";
    return oInput;
    }
    function f_PublicCreateDropDown()
    {
    var oTable = window.document.createElement("TABLE");
    oTable.cellSpacing = 0;
    oTable.cellPadding = 0;
    oTable.id = "AXTeamDropDown"+uniqueID;
    oTable.border = 0;
    oTable.bgColor="#DBD8D1";
    oTable.style.cssText = "display:inline;cursor:default;";
    oTable.attachEvent("onselectstart", fnCancel);
    var otd = oTable.insertRow().insertCell();
    otd.style.cssText = "font-family: webdings;font-size:8px;text-align: center;width:13px;height:17px;";
    otd.innerText = "6";
    ComboBox.rows[0].insertCell().appendChild(oTable);
    return oTable;
    }
    function f_PublicCreateDropList()
    {
    var oTable = window.document.createElement("TABLE");
    oTable.cellSpacing = 1;
    oTable.cellPadding = 0;
    oTable.border = 0;
    oTable.bgColor="#FFFFFF";
    oTable.style.cssText = "font-size:9pt;cursor:default;border:1px solid #666666;";
    oTable.attachEvent("onselectstart", fnCancel);
    return oTable;
    }
    function f_PublicCreateDropListData(aNodes,redata)
    {
    if(!redata)
    var re=new RegExp("^");
    else
    var re=new RegExp("^"+redata,"i");
    var otd = null;
    var No=DropList.rows.length;
            for(i=0;i<No;i++)DropList.deleteRow();
    for(var i=0;i<aNodes.length;i++)
    {
    if(re.test(aNodes[i])==true)
    {
    otd = DropList.insertRow().insertCell();
    otd.style.height = "12px";
    otd.innerHTML = aNodes[i];
    otd.attachEvent("onmouseover",DropListOver);
    otd.attachEvent("onmouseout",DropListOut);
    otd.attachEvent("onclick",DropListClick);
    }
    }}
    function f_PublicCreatePopup()
    {
    var oSpan = element.document.createElement("span");
    oSpan.style.cssText = "position:absolute;display:none;cursor:default;z-index:100;";
    window.document.body.appendChild(oSpan);
    return oSpan;
    }
    function f_CreateNodes(htmlText)
    {
    var oSpan = element.document.createElement("span");
    oSpan.innerHTML = htmlText;
    var xNodes = oSpan.childNodes;
    var Nodes = new Array();
    var nNumNodes = (xNodes == null) ? 0 : xNodes.length;
    for (var nIndex = 0; nIndex < nNumNodes; nIndex++)
    {
    var node = xNodes[nIndex];
    if (node != null)
    Nodes = Nodes.concat(f_CreateDropListItems(node));
    }
    return Nodes;
    }
    function f_CreateDropListItems(oNode)
    {
    var rNodes;
    var szTagName = (oNode.tagName == null) ? "" : oNode.tagName.toLowerCase();
    if(szTagName == "option")
    {
    var szText = oNode.innerText;
    rNodes = new Array(szText);
    }
    else
    rNodes = new Array();
    return rNodes;
    }
    function fnMouseover()
    {
    if(ComboBox.ComboBoxFocus) return;
    overstat();
    }
    function fnMouseout()
    {
    if(ComboBox.ComboBoxFocus) return;
    defaultstat();
    }
    function fnMousedown()
    {
    if(event.srcElement != ComboBoxIpt)
    {
    if(oPopup.style.display == '')
    {
    oPopup.style.display = 'none';
    DropDown.style.color = "#000000";
    return;
    }
    f_PublicCreateDropListData(aNodes)
    ComboBoxIpt.select();
    DropDown.style.color = "#FFFFFF";
    }
    oPopup.appendChild(DropList);
    oPopup.style.width = (oPopup.offsetWidth < ComboBox.offsetWidth) ? ComboBox.offsetWidth : oPopup.offsetWidth;
    oPopup.style.left = getx(ComboBox);
    oPopup.style.top = gety(ComboBox)+19;
    oPopup.style.display = '';
    oPopup.children[0].width = "100%";
    ComboBox.ComboBoxFocus = true;
    }
    function overstat()
    {
    ComboBox.bgColor="#0A246A";
    DropDown.bgColor="#B6BDD2";
    DropDown.style.color = "#000000";
    }
    function defaultstat()
    {
    ComboBox.bgColor="#FFFFF";
    DropDown.bgColor="#DBD8D1";
    DropDown.style.color = "#000000";
    }
    function DropListOver()
    {
    obj = event.srcElement;
    obj.bgColor='highlight';obj.style.color='#FFFFFF';obj.style.cursor='default';
    }
    function DropListOut()
    {
    obj = event.srcElement;
    obj.bgColor='#FFFFFF';obj.style.color='#000000';
    }
    function DropListClick()
    {
    obj = event.srcElement;
    ComboBoxIpt.value = obj.innerText;
    oPopup.style.display = "none";
    ComboBoxIpt.select();
    DropDown.style.color = '#000000';
    }
    function ComboBoxFocus()
    {
    if(ComboBox.ComboBoxFocus) return;
    ComboBox.ComboBoxFocus = true;
    overstat();
    }
    function ComboBoxBlur()
    {
    if(ComboBox.ComboBoxFocus) return;
    defaultstat();
    }
    function ComboBoxKeyup()
    {
    f_PublicCreateDropListData(aNodes,ComboBoxIpt.value);
    fnMousedown();
    addOption();
    }
    function addOption(){
     if(event.keyCode==13)
     {
    aNodes[aNodes.length] = ComboBoxIpt.value;
     }  
    }function chkstat()
    {
    var oEl = event.srcElement;
    while( null != oEl && oEl != ComboBox)
    {
    oEl = oEl.parentElement;
    }
    if(oEl == null)
    {
    defaultstat();
    ComboBox.ComboBoxFocus = false;
    oPopup.style.display = "none";
    }
    }function fnCancel()
    {
    return false;
    }
    function getx(e)
    {
    var l=e.offsetLeft;
    while(e=e.offsetParent){
    l+=e.offsetLeft;
    }
    return l;
    }
    function gety(e)
    {
    var t=e.offsetTop;
    while(e=e.offsetParent){
    t+=e.offsetTop;
    }
    return t;
    }
    </SCRIPT>test.html
    <HTML><HEAD>
    <TITLE>类似于ie地址栏的下拉列表:回车提交,动态提示</TITLE>
    <META http-equiv=Content-Type content="text/html; charset=gb2312">
    </HEAD><BODY><?XML:NAMESPACE PREFIX="AXTeam" />
    <?IMPORT NAMESPACE="AXTeam" IMPLEMENTATION="ComboBox.htc" />
    <AXTeam:ComboBox id="ComboBox1" width='200'><AXTeam:option>中国</AXTeam:option>
    <AXTeam:option>美国</AXTeam:option>
    <AXTeam:option>日本</AXTeam:option>
    <AXTeam:option>韩国</AXTeam:option>
    <AXTeam:option>法国</AXTeam:option>
    <AXTeam:option>中华人民共和国</AXTeam:option></AXTeam:ComboBox>
    </BODY>
    </HTML>
      

  4.   

    其实我早就写过这样的js组件。
    QQ:181529329
      

  5.   

    其实QQ空间(qzone)里的页脚下面一排右侧就是这样的功能,可以查看它的源代码。