可以输入文字的下拉列表

网页中下拉列表的选项是固定的,这样就存在一些弊端,如果用户想要选择的项目不在下拉菜单的选项中,该怎么办?如果能在下拉菜单中输入文字,这个问题就解决了。以下实例中,菜单选项中只包括了“新进成员”、“游侠”、“版主”3个选项,如果要添加的用户是上面三个选项以外的等级,就可以在下拉菜单中直接输入等级名称。程序运行结果如图:

由于下拉菜单的选项是固定的,所以要实现在下拉菜单中输入文字,首先要捕获用户的键盘事件,然后根据键盘输入的数据动态添加下拉菜单的选项,同时还需要判断用户按下的是退格键还是空格键,如果是退格键,则需要从已经添加的文字中删除一个文字,如果是空格键,则需要在已经添加的文字后添加一个空格字符。

本实例主要应用javascript来设置元素的innerText属性、应用String对象的fromCharCode()方法以及select元素对象option数组的remove()方法。下面分别介绍下。

 innerText属性:用于修改其实标记与结束标记之间的文本。

 fromCharCode方法:返回指定数值对应的字符,即将数值转换为字符。

 remove方法:删除option数组中的对应选项。

(1)在页面中添加“等级名称”下拉菜单,其中包括“新进成员”、“游侠”、“斑竹”3个选项,代码如下:

<form name="form1">
  <select name="sel_grand" id="sel_grand" onkeypress="add_opt(3)" onkeyup="edit_opt(3)">
        <option selected>新进成员</option>
        <option>游侠</option>
        <option>斑竹</option>
      </select>
</form>

(2)在select标记的onkeypress事件中调用自定义函数add_opt(opt),用于在下拉菜单中添加新的选项,并设置该选项为选中状态,代码如下: 

function add_opt(opt){
//opt表示现有可选项的数目
    form1.sel_grand.options[opt]=new Option(ok=(form1.sel_grand.options[opt])?
    form1.sel_grand.options[opt].innerText+String.fromCharCode(event.keyCode):
    String.fromCharCode(event.keyCode),ok)
    form1.sel_grand.selectedIndex=opt;
}

(3)在select标记的onkeyup事件中调用自定义函数edit_opt(opt),用于处理当用户按下退格键是,将已经写到下拉菜单中的文字删除,当用户按下空格键时,在下拉菜单中添加一个空格字符,代码如下:

function edit_opt(opt){
//opt表示现有可选项的数目
    if(form1.sel_grand.options[opt]){
        if(event.keyCode==8){
            var str=form1.sel_grand.options[opt].innerText;
            var len=str.length;
            form1.sel_grand.options[opt].innerText=str.substring(0,len-1);
            if(form1.sel_grand.options[opt].innerText==""){
                form1.sel_grand.remove(opt);
                form1.sel_grand.selectedIndex=1;
            };
        }
        if(event.keyCode==32){
            form1.sel_grand.options[opt].innerText+=" ";
        }
    }
}
</script>

 

posted @ 2012-12-04 17:49  rabbit2012  阅读(15038)  评论(3编辑  收藏  举报