在最近有个项目中 需要实现当文本框聚焦的时候,可以键盘上下键选择内容,按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'
});
})

jquery实现输入框聚焦,键盘上下键选择城市的更多相关文章

  1. jquery.autocomplete修改 实现键盘上下键 自动填充

    根据需求要实现通过键盘上下移动,获得联想菜单中的值,如同google baidu的查询功能. 在网上找了很久没有找到可以实现该功能的插件,无奈只能自己动手改代码.找到js中的KEY.DOWN 和 KE ...

  2. 类似智能购票的demo--进入页面后默认焦点在第一个输入框,输入内容、回车、right时焦点自动跳到下一个,当跳到select时,下拉选项自动弹出,并且可以按上下键选择,选择完成后再跳到下一个。

    要实现的效果:进入页面后默认焦点在第一个输入框,输入内容.回车.right时焦点自动跳到下一个,当跳到select时,下拉选项自动弹出,并且可以按上下键选择,选择完成后再跳到下一个. PS:自己模拟的 ...

  3. windows使用git bash 无法交互键盘上下键移动选择选项的解决方法

    目录 遇到的问题 解决方案 1. 直接通过数字键来选择 2. 使用 winpty 来启动命令 3. 将 git bash 换成 cmd 4. 使用vscode中是bash 遇到的问题 windows使 ...

  4. 通过键盘上下键 JS事件,控制候选词的选择项

    效果图 JS代码 //上下键 选择事件 searchBackgroud 为样式,只做标记,无实质样式,因为和其他样式不兼容,只能添加CSS $(document).keydown(function ( ...

  5. jquery的输入框自动补全功能+ajax

    jquery的输入框自动补全功能+ajax 2017年05月10日 18:51:39 辣姐什么鬼 阅读数:1461 标签: web前端 更多 个人分类: web前端   内容参考网友文章写成,原博的链 ...

  6. 【转】swift实现ios类似微信输入框跟随键盘弹出的效果

    swift实现ios类似微信输入框跟随键盘弹出的效果 为什么要做这个效果 在聊天app,例如微信中,你会注意到一个效果,就是在你点击输入框时输入框会跟随键盘一起向上弹出,当你点击其他地方时,输入框又会 ...

  7. 【转】IOS 输入框被键盘遮盖的解决方法

    做IOS开发时,难免会遇到输入框被键盘遮掩的问题.上网上搜索了很多相关的解决方案,看了很多,但是由衷的觉得太麻烦了. 有的解决方案是将视图上的所有的东西都添加到一个滚动视图对象( UIScrollVi ...

  8. 【转】ios输入框被键盘挡住的解决办法

    做IOS开发时,难免会遇到输入框被键盘遮掩的问题.上网上搜索了很多相关的解决方案,看了很多,但是由衷的觉得太麻烦了. 有的解决方案是将视图上的所有的东西都添加到一个滚动视图对象( UIScrollVi ...

  9. legend---七、jquery如何选中select的selected的选择上的自定义属性

    legend---七.jquery如何选中select的selected的选择上的自定义属性 一.总结 一句话总结:用冒号属性选择器 var type=$(this).children('option ...

随机推荐

  1. JavaScript 事件入门

    一.事件介绍 JavaScript 有三种事件模型:内联模型.脚本模型和 DOM2 模型. 二.内联模型 //在 HTML 中把事件处理函数作为属性执行 JS 代码 <input type=&q ...

  2. asp.net中控制反转的理解

    对IOC的解释为:“Inversion of control is a common characteristic of frameworks, so saying that these lightw ...

  3. arcgis破解的时候,不能启动license manager的问题

    1.防火墙没关:(非常重要) 2.win+R,调出控制台,输入services.msc.然后手动开启ArcGIS license manager服务,关闭其余类似erdas,matlab影响该服务的开 ...

  4. sharepoint2010升级到sharepoint2013的升级步骤和过程

  5. [Android]Android系统启动流程源码分析

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5013863.html Android系统启动流程源码分析 首先 ...

  6. Kotlin语法(函数和lambda表达式)

    三.函数和lambda表达式 1. 函数声明 fun double(x: Int): Int { } 函数参数是用 Pascal 符号定义的 name:type.参数之间用逗号隔开,每个参数必须指明类 ...

  7. 《The Linux Command Line》 读书笔记03 ls命令与长格式输出解释 文件权限

    ls命令与长格式输出解释 文件权限 ls命令 ls 命令用于列出目录内容,不带参数时列出当前工作目录的内容,也可以指定目标目录(可以指定多个),列出目标目录下的内容. ls命令的参数 ls -l 长格 ...

  8. CocoaPods常用终端命令及Profile文件简单介绍

    Pod常用终端命令 pod init 创建pod文件 pod install 开始安装第三方框架,如果网上有更新,会安装最新的 pod install --verbose--no-repo-updat ...

  9. Label自适应高度

    每次都逼我翻代码   这次干脆写博客里面算了 哈哈哈 CGSize maxSize = CGSizeMake(ScreenWith-30,NSIntegerMax); CGSize labelsize ...

  10. Apache安装

    记录安装Apache的流程,没有进行详细配置,只是记录搭建服务器的流程用于学习Ajax等知识,方便以后重新安装,不用每次都翻别人博客学习安装了,大神看到这里可以关掉这个粗糙简陋的博文了. 1. 官网上 ...