我的表格格式是这样的不能改动:
6908741329326 | ewfdsfsdf | dfsdfsdf | dfsdfsd | ||
6908741329326 | dsdfsfsdf | sdfsdfsfs | dfsdfsd | ||
再不行的话我要崩溃了...
[code="js"]<br> function keyDown(){<br> var iekey=event.keyCode;<br> var realkey=String.fromCharCode(event.keyCode);<br> //按"Insert"键表格获取光标事件<br> var grid=document.getElementById("myGrid");<br> var order=event.target||event.srcElement; //得到当前的文本框<br> if(order.tagName=="INPUT"){<br> var curRow = order.parentNode.parentNode.rowIndex;//行索引<br> var curCol = order.parentNode.cellIndex;//列索引<br> var rowCount=grid.childNodes[0].childNodes.length-1;<br> var colCount=grid.childNodes[0].childNodes[0].childNodes.length-1;<br> if(iekey==38){<br> if(--curRow>=0&&grid.childNodes[0].childNodes[curRow].childNodes[curCol].childNodes[0].tagName=="INPUT"){<br> grid.childNodes[0].childNodes[curRow].childNodes[curCol].childNodes[0].select();//选中上一行的文本框.<br> }<br> }else if(iekey==40){<br> if(++curRow<=rowCount&&grid.childNodes[0].childNodes[curRow].childNodes[curCol].childNodes[0].tagName=="INPUT"){<br> grid.childNodes[0].childNodes[curRow].childNodes[curCol].childNodes[0].select();//选中下一行的文本框.<br> }<br> }else if(iekey==39){<br> if(++curCol<=colCount&&grid.childNodes[0].childNodes[curRow].childNodes[curCol].childNodes[0].tagName=="INPUT"){<br> grid.childNodes[0].childNodes[curRow].childNodes[curCol].childNodes[0].select();//选中下列的文本框.<br> }<br> }else if(iekey==37){<br> if(--curCol>=0&&grid.childNodes[0].childNodes[curRow].childNodes[curCol].childNodes[0].tagName=="INPUT"){<br> grid.childNodes[0].childNodes[curRow].childNodes[curCol].childNodes[0].select();//选中前列的文本框.<br> }<br> }<br> }<br> }<br> document.onkeydown = keyDown;<br>
测试用 | ||
测试用 | 测试用 | 测试用 |
冒昧的问一下,楼主到底是要实现什么功能?这个功能在项目的模块中是用来干啥的?为什么一定要用方向键来控制光标的位置?
如果只是想要按键盘,光标移位动到另一个文本框中的话,tab键是最常用的。用方向键来控制光标的位置,很多人都不会习惯(包括我)。尤其是按<-键移动到前一个单元格,我习惯性的都是拿鼠标去点,而不会想到键盘。
按照平时输入时的顺序,给每个文本框的tabIndex由小到大进行赋值值。然后按tab键的时候就会自动跳到下一个文本框中。按shift+tab键,就会回到前一个文本框中去。
没必要自己再手动添加这些东西啊。
其实感觉这个问题很简单...
思路和我之前对你表格快捷键差不多。
也就是在onkeyup的时候,获取到event.target(FF)或event.srcElement(IE),当它的tagName为INPUT时,证明文本框是被选中的,这时再获取它的父节点,即TD标签。
然后通过TD标签的rowIndex属性,就可以知道当前文本框是在哪一行。通过TD的parentNode.colIndex属性,就可以知道它是属于哪一列。既然知道了它的位置,一切就好办了。
通过判断按下的方向键是哪个,选中相应的TD标签中的文本框就可以了。具体实现可以参照我之前所写的那段代码。
没必要用到name和ID值啊..你不必要知道你的这个文本框叫什么,内容是什么。
你在onkeyup事件中要做的只是
1>.按下这个键的时候,光标是不是在文本框中。也就是通过event.target||event.srcElement的tagName来判断。
2>.按下的是哪个键,然后选中相应位置的文本框。如:[code="js"]
var grid=表格对象;
var order=event.target||event.srcElement;//得到当前的文本框
if(向上键){
var curRow=order.parentNode.rowIndex;//得到当前行索引
var curCol=order.parentNode.parentNode.//得到当前列索引
if(grid.childNodes[0].childNodes[curRow-1]!=null){
grid.childNodes[0].childNodes[curRow-1].childNodes[curCol].childNodes[0].select();//选中上一行的文本框.
}
}else if(向下键){
……
grid.childNodes[0].childNodes[curRow].childNodes[curCol-1].childNodes[0].select();//选中下一列的文本框.
……
}else if(……){
…………
}[/code]
上面代码中的第二个else if逻辑有错...由于直接手写的..没注意。
不过应该不会影响楼主理解吧。
汗...不好意思,记错了。
获得列索引是:TD.cellIndex。
获得行索引是:TR.rowIndex。
……………………
[code="java"]order.parentNode.parentNode.rowIndex;//行索引
order.parentNode.cellIndex;//列索引[/code]
如果再出现错误的话,麻烦楼主把错误提示,错误代码一起贴出来。