你问我答(37)——jQeury实现回车键代替Tab键
昨天和青色同学聊了几句,说到一个具体的技术问题,我觉得可能有一些普遍性,这里详细说一说。
问题要求
问题是这样的实际的情境:对于一个网页上的表单,放置了一个提交按钮以后,用户如果按了键盘的回车键,默认情况下,就会提交这个表单了。这样对于用户输入各个表单项目,会很不方便,输入完一个项目,或者用鼠标选择下一个项目,或者用键盘的Tab键选中下一个项目。
现在希望实现的要求是:
1:如果当前处于焦点(也就是用户正在输入的那个文本框)不是最后一个输入框,那么按回车键时,将焦点转移到下一个输入框;
2:如果当前处于焦点(也就是用户正在输入的那个文本框)是最后一个输入框,那么按回车键时,将请用户确认后提交表单;
基本思路
这个问题使用jQeury实现是很方便,这里面主要有两个问题需要解决,
1:判断按键是否是回车建, 这个比较好办,用jQeury中的 keypress 事件,就可以获取到当前按的键的值了,回车键的值是13,比较一下即可。
2:判断当前处于焦点的输入框是不是最后一个输入框。
说明:如果对Javascript和jQeury完全不了解的读者,最好先学习一下相关的基本知识:http://learning.artech.cn/20080621.mastering-javascript-jquery.html 。我们这里就不解释最基本的概念了。
实现方法
下面是具体的代码,首先是非常简单的HTML代码,可以看到,一个form元素,里面有三个输入框,和一个提交按钮,输入框分别设置了id属性。
1 2 3 4 5 6 7 8 9 | <form id="myform"> <label>first name : </label><input type="text" id="firstName" name="firstName" /> <label>last name : </label><input type="text" id="laseName" name="laseName" /> <label>addess : </label><input type="text" id="address" name="address" /> <input type="submit" value="submit" /> </form> |
接下来是Javascript代码了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | $(function() { $("#myform input:text").keypress(function(e) { if (e.which == 13) //判断所按是否回车键 { var inputs = $("#myform").find(":text"); //获取表单中的所有输入框 var idx = inputs.index(this); //获取当前焦点输入框所处的位置 if (idx == inputs.length - 1) // 判断是否是最后一个输入框 { if (confirm("最后一个输入框已经输入,是否提交?")) //用户确认 $("#myform").submit(); //提交表单 } else { inputs[idx + 1].focus(); //设置焦点 inputs[idx + 1].select(); //选中文字 } return false;//取消默认的提交行为 } }); }); |
下面具体解释上述代码。
说明:如果对Javascript和jQeury完全不了解的读者,最好先学习一下相关的基本知识:http://learning.artech.cn/20080621.mastering-javascript-jquery.html 。我们这里就不解释最基本的概念了。
第1行:说明一下代码在页面完全装入浏览器以后执行。
第3行:对表单中的输入框设置keypress事件,注意参数中函数带有一个参数,将通过它获取当前按键的数值。
第5行:判断是否是回车键,如果不是,则不作任何处理,如果是怎进入下面的代码。
第7行:获取表单中的所有输入框,以便判断当前的输入框是否是最后一个。
第8行:获取当前输入框在扁担的多有输入框中处于第几个。
第10行:判断是否是最后一个输入框。
第12-13行:如果是最后一个,那么显示一个确认框,如果用户确认,则提交表单
第17-18行:如果不是最后一个,那么将下一个输入框设置为焦点,并将其中的文字选中
第21行:取消默认的提交表单操作。
问题小结
1:可以看出,jQeury对我们写前段程序,确实非常方便,可以说jQeury的出现,改变了我们写Javascript程序的方式,就像C语言的出现,我们不再用汇编那样一个字节一个字节计算内存。
2:从效率角度,第7行代码,可以放到第3行的前面,这样,就不用每次都搜索一次DOM元素,不过实际体验不出速度的变化。
4,939


Pretty good post. I just stumbled upon your blog and wanted to say that I have really enyed reading your blog posts. Any way I鈥檒l be subscribing to your feed and I hope you post again soonbest reviews site
写的很好!
developer ,
谢谢您的支持!
欢迎常来这里交流!
很好,代码比我想象的要少,各种情况也都考虑到了。。。