[转载]【下拉框可输入+自动提示+支持键盘事件兼容IE,FF】 – 从小就很拽 – 博客园.
今天公司一同事跑过来问我说会不会做下拉框可以输入,并且要输入一个 字就就要提示,要匹配的数据是下拉框里面拥有的值,我说以前做过,他就要求我帮他做一下,反正也没事就做了下,本来也没什么事,但是他一句话我石化了,他 说下拉框只有固定的8到10个值,我心想那有必要做这种吗,用手选还快,还提示过球球啊。最终明白了,万恶的客户,既然写了就放到园子里做下记录,可能对 某些朋友有用,上图看下。
没做美化,自己随便写的,有那里写的不够给力的,请大神们多指点,小弟在此先谢了。
$(document).ready( function () { var cus = 0; var classname = "" ; var arry = new Array(); var $autocomplete = $( "<ul class='autocomplete'></ul>" ).hide().insertAfter( "#box4" ); $( "#hoho" ).find( "option" ).each( function (i, n) { arry[i] = $( this ).text() }); $( "#box4" ).keyup( function (event) { if ((event.keyCode != 38) && (event.keyCode != 40) && (event.keyCode != 13)) { $autocomplete.empty(); var $SerTxt = $( "#box4" ).val().toLowerCase(); if ($SerTxt != "" && $SerTxt != null ) { for ( var k = 0; k < arry.length; k++) { if (arry& #91;k].toLowerCase().indexOf($SerTxt) >= 0) { $( "<li title=" + arry& #91;k] + " class=" + classname + "></li>").text(arry[k]).appendTo($autocomplete).mouseover(function() { $( ".autocomplete li" ).removeClass( "hovers" ); $( this ).css({ background: "#3368c4" , color: "#fff" }) }).mouseout( function () { $( this ).css({ background: "#fff" , color: "#000" }) }).click( function () { $( "#box4" ).val($( this ).text()); $autocomplete.hide() }) } } } $autocomplete.show() } var listsize = $( ".autocomplete li" ).size(); $( ".autocomplete li" ).eq(0).addClass( "hovers" ); if (event.keyCode == 38) { if (cus < 1) { cus = listsize - 1; $( ".autocomplete li" ).removeClass(); $( ".autocomplete li" ).eq(cus).addClass( "hovers" ); var text = $( ".autocomplete li" ).eq(cus).text(); $( "#box4" ).val(text) } else { cus--; $( ".autocomplete li" ).removeClass(); $( ".autocomplete li" ).eq(cus).addClass( "hovers" ); var text = $( ".autocomplete li" ).eq(cus).text(); $( "#box4" ).val(text) } } if (event.keyCode == 40) { if (cus < (listsize - 1)) { cus++; $( ".autocomplete li" ).removeClass(); $( ".autocomplete li" ).eq(cus).addClass( "hovers" ); var text = $( ".autocomplete li" ).eq(cus).text(); $( "#box4" ).val(text) } else { cus = 0; $( ".autocomplete li" ).removeClass(); $( ".autocomplete li" ).eq(cus).addClass( "hovers" ); var text = $( ".autocomplete li" ).eq(cus).text(); $( "#box4" ).val(text) } } if (event.keyCode == 13) { $( ".autocomplete li" ).removeClass(); $( "#HTML" ).html( "你选择的是<font color='red'>" + $( ".autocomplete li" ).eq(cus).text()+ "</font>" ); $autocomplete.hide(); } }).blur( function () { setTimeout( function () { $autocomplete.hide() }, 3000) }) }); function setValue(index) { var ddl = document.getElementById( "hoho" ); var Value = ddl.options[index].text; document.getElementById( "box4" ).value = Value $( "#HTML" ).html( "你选择的是<font color='red'>" +Value+ "</font>" ); } |
.hoho{ width : 197 ; height : 20px !important ; height : 17px ; margin-left : -180px !important ; margin-left : -179px } .sp{ margin-left : 179px ; width : 18px ; overflow : hidden ; } .bo 4 { width : 178px ; position : absolute ; left : 0px !important ; height : 20px !important ; top : 0.5px !important ; left : 1px ; top : 0px ; height : 20px } .autocomplete{ list-style-type : none ; margin : 0px ; padding : 0px ; border : #008080 1px solid } .autocomplete li{ font-size : 12px ; font-family : "Lucida Console" , Monaco, monospace ; font-weight : bold ; cursor : pointer ; height : 20px ; line-height : 20px } .hovers{ background-color : #3368c4 ; color :fff} |
< table width = "440" border = "0" align = "center" > < tr > < td >< div style = "position:relative;" > < span class = "sp" > < select id = "hoho" name = "hoho" class = "hoho" onChange = "setValue(this.selectedIndex)" > < option > ===请选择===</ option > < option value = '0' >Java EE</ option > < option value = '1' >Java SE</ option > < option value = '2' >Java ME</ option > < option value = '3' >Net</ option > < option value = '4' >PHP</ option > < option value = '5' >Ajax</ option > < option value = '6' >JQuer</ option > </ select > </ span > < input name = "box4" id = "box4" value = "===请选择===" class = "bo4" > </ div > </ td > < td id = "HTML" width = "350" >输入A试试</ td > </ tr > </ table > |