您的位置:首页 > Web前端 > JavaScript

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

2017-06-06 10:38 671 查看
通过坐标定位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();
}
}




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: