获取键盘按键的Javascript代码(兼容IE、Firefox)

作者:北大青鸟南京中博-张宪芝
南京航空航天大学计算机技术研究生,曾前往德国交流,多年高校及软件开发公司工作经验。
S2很重要的一门课程《JavaScript客户端验证和页面特效制作》的第六章给同学们介绍了获取键盘按键的JavaScript代码,可惜该段代码适用于IE浏览器,在Firefox中却完全失了效果,经不起推敲。在本文中,我把上课时给同学们补充的例子写下,方便同学们学习。
同学们可将下面的JavaScript代码复制到head标签内验证。 document.onkeydown=function(evt) { var isie = (document.all) ? true : false; var key; var srcobject; if (isie) { key = event.keyCode; srcobject=event.srcElement; } else { key = evt.which; srcobject=evt.target; }
if(key==13 && srcobj.type!='button' && srcobj.type!='submit' &&srcobj.type!='reset' && srcobj.type!='textarea' && srcobj.type!='') { if(isie) { event.keyCode=9; } else { var el=getNextElement(evt.target); if (el.type!="hidden") el.focus(); else while (el.type=="hidden") el=getNextElement(el); el.focus(); return false; } } } function getNextElement (field) { var form = field.form; for (var e = 0; e < form.elements.length; e++) { if (field == form.elements[e]) break; } return form.elements[++e % form.elements.length]; }
我们分析这段代码的第一句var isie = (document.all) ? true : false; 它的目的是判断当前浏览器类型,以期区别对待IE和其他浏览器。 首先需要确定当前浏览器中的document对象是否有all这个属性,IE中,这个属性值就是当前页面的所有的元素,那么显然all是一个object,可以这样理解: document.all = {ele1:, ele2:, .... ...}; 那么你想访问一个div,id=div1,就可以document.all.div1。 然而其他浏览器比如Firefox中,document没有all这个属性,document.all = undefined,而if在运算的时候,会把括号里面的表达式值试图转换成boolean类型,显然,对于IE,document.all是存在的,因此结果为真的,对于其他浏览器,这个就是undefined,这个转换成boolean就是false了。 |