在最近有个项目中 需要实现当文本框聚焦的时候,可以键盘上下键选择内容,按enter键的时候,把内容传到输入框中,如图所示:
实现代码如下:
/** *输入框聚焦,键盘上下键选择城市 */ ;(function($){ $.fn.inputKey=function(options){ var settings=$.extend({ \'focusID\':\'#city2\',//聚焦的输入框ID或class \'slideBox\':\'.FdestinationBox\',//内容容器Div \'current\':\'current\',//li有选中状态的class名 \'dataCity\':\'data-city\'//li上的属性 如:<li data-city="北京"></li> },options); return this.each(function(){ var number = 0; var $focusDiv = $(settings.focusID); var $slideBox = $(settings.slideBox); var $slideBoxLi = $slideBox.find(\'li\'); var sizeLength = $slideBox.find(\'li\').size(); $focusDiv.focus(function(){ // sizeLength = $slideBox.find(\'li\').size(); $slideBoxLi.removeClass(settings.current);//初始化current状态 $slideBox.css({\'display\':\'block\'}); }); if(window.addEventListener){ $focusDiv[0].addEventListener("input", function () { number = 0; sizeLength = $slideBox.find(\'li\').size(); $slideBoxLi.removeClass(settings.current); $slideBoxLi.eq(0).addClass(settings.current); }); }else{ $focusDiv[0].attachEvent("input", function () { number = 0; sizeLength = $slideBox.find(\'li\').size(); $slideBoxLi.removeClass(settings.current); $slideBoxLi.eq(0).addClass(settings.current); }); } $focusDiv.on(\'keyup\',function(e){ console.log(sizeLength); e=window.event||e; if(e.keyCode==38){ if(number>0){ number--; }else{ number=sizeLength-1; } $slideBoxLi.removeClass(settings.current); $slideBoxLi.eq(number).addClass(settings.current); } else if(e.keyCode==40){ if(sizeLength-1 > number){ number++; }else{ number=0; } $slideBoxLi.removeClass(settings.current); $slideBoxLi.eq(number).addClass(settings.current); } else if(e.keyCode==13){ var dataCity = $slideBoxLi.eq(number).attr(settings.dataCity); $focusDiv.val(dataCity); $slideBox.fadeOut(); $focusDiv.blur(); $slideBoxLi.removeClass(settings.current); } }); $slideBoxLi.hover(function(){ number=$(this).index(); $slideBoxLi.removeClass(settings.current); $(this).addClass(settings.current); }); $(\'body\').on(\'click\',$slideBoxLi,function(e){ e.preventDefault(); var dataCity = $slideBoxLi.eq(number).attr(settings.dataCity); $focusDiv.val(dataCity); number=0; }); }); } })(jQuery);
调用的方式:
$(function(){ $("#city2").inputKey({ \'focusID\':\'#city2\', \'slideBox\':\'.FdestinationBox\', \'current\':\'current\', \'dataCity\':\'data-city\' }); })