Javascript 中键盘方向键控制光标在表单中切换之不规则列表

来源:互联网 发布:阿里云oss和七牛 编辑:程序博客网 时间:2024/06/07 03:17

通过坐标定位input元素:虽然麻烦,但更加通用,实用性很强,只要坐标标记正确,就完全没问题。主要针对的对象是列数不规则的列表,当然列数规则的列表更不在话下。至于兼容性,使用者可以适当修改一下代码。

注意:如果列表的列数是规则的,建议采用我的另一篇博客文章》》键盘方向键控制光标在表单中切换之规则列表

<table border='1'>   <tr>   <td><input type="text" id="0_0" value="测试d用" /></td><td><input type="text" id="1_0" value="测d试用" /></td><td><input type="text" id="2_0" value="测asf试用" /></td>   </tr>   <tr>   <td><input type="text" id="0_1" value="测试q用" /></td><td><input type="text" id="1_1" value="测试q用" /></td><td><input type="text" id="2_1" value="测as试用" /></td>   </tr>   <tr>   <td><input type="text" id="0_2" value="测用" /></td><td><input type="text" id="1_2" value="测试用"/></td><td><input type="text" id="2_2" value="测试用" /></td>   </tr>  </table> js代码:var inp = $(":text").not($("input[readonly]"));inp.keydown(function(event){event = event || window.event;var iekey = event.keyCode; //获取你键盘按下的的什么键(得到数字)var xy = $(this).attr("id").split("_");var x = parseInt(xy[0]);var y = parseInt(xy[1]);//上下切换if (iekey == 38 || iekey == 40) {y = y + (iekey - 39); //获取移动到的位置var id = x+"_"+y;//如果位置存在if ($("#"+id).length>0) {setTimeout(function(){$("#"+id).select();},10);}else{//如果不存在则:切换到下一行或上一行id = 0+"_"+y;setTimeout(function(){$("#"+id).select();},10);}} //左右切换if (iekey == 37 || iekey == 39) {x = x + (iekey - 38); //获取移动到的位置var id = x+"_"+y;var gh = $("#"+id);//获取当前光标在表单的位置        if (document.selection) {        var sel = document.selection.createRange();            sel.setEndPoint("StartToStart", this.createTextRange())            var s = sel.text.length //获取光标在表单的位置        }else{            var s = this.selectionStart; //获取光标在表单的位置        }//如果位置存在:向右移动if ($("#"+id).length>0 && s == this.value.length && iekey == 39) {setTimeout(function(){$("#"+id).select();},10);//setCaretPosition(gh[0],gh[0].value.length);//如果位置存在:向左移动}else if($("#"+id).length>0 && s == 0 && iekey == 37){setTimeout(function(){$("#"+id).select();},10);//setCaretPosition(gh[0],0);//如果不存在则:切换到上一行}else if($("#"+id).length == 0 && s == 0 && iekey == 37){id = 0+"_"+(y+(iekey-38));setTimeout(function(){$("#"+id).select();},10);//如果不存在则:切换到下一行}else if($("#"+id).length == 0 && s == this.value.length && iekey == 39){id = 0+"_"+(y+(iekey-38));setTimeout(function(){$("#"+id).select();},10);}}});//控制光标的初始化位置function setCaretPosition(obj, pos){       if(obj.setSelectionRange){           obj.setSelectionRange(pos,pos);           }else if(obj.createTextRange) {        var range = obj.createTextRange();        range.collapse(true);        range.moveEnd('character', pos);        range.moveStart('character', pos);        range.select();    }  }

 
阅读全文
0 1
原创粉丝点击