使用Javascript 怎样对表格加快捷键,有实例最好

我的表格格式是这样的不能改动:























6908741329326ewfdsfsdfdfsdfsdfdfsdfsd
6908741329326dsdfsfsdfsdfsdfsfsdfsdfsd



以上是表格的样子,只有文本框中的内容可以改动,其他的值不能改动,文本框name="aaa",id是动态获取的值,id="dddd"和id="ccc"的文本框是固定的值,name="remark"文本框是可改动的。我的意思是这样的,当第一行获取光标后就把光标定位到name="aaa"的文本框,然而按"=>"光标,进入id="ddd"的文本框,再按下光标进入id="ccc"的文本框,按左光标进入name="aaa"的文本框编辑文本框.最好有实例...........谢谢。
[b]问题补充:[/b]
在模块中是用来输入订单数据,方面用户使用,只有文本框的数据可以修改,其他数据是从数据库查询出来的不能改动的
[b]问题补充:[/b]
用户有比较多的订单,在很短的时间内输入,用户要求用光标速度比较快,不会用table键,我开始的想法也是用Table键,用户要求不行.希望可以用光标实例...........
[b]问题补充:[/b]
大家过来帮帮忙。。。本人非常感谢!
[b]问题补充:[/b]
实现不了,原因是文本框的name值是数组,id是动态的,不能搞定
[b]问题补充:[/b]
var curRow=order.parentNode.rowIndex;//得到当前行索引

var curCol=order.parentNode.parentNode.//得到当前列索引

我试了一下上面二行有问题.
[b]问题补充:[/b]
是用order.TR.rowIndex 这个吗好像不对。
[b]问题补充:[/b]
function keyDown(){
var iekey=event.keyCode;
var realkey=String.fromCharCode(event.keyCode);
//按"Insert"键表格获取光标事件
var grid=document.getElementById("protable");
var order=event.target||event.srcElement; //得到当前的文本框
if(iekey==38){
var curRow = order.parentNode.parentNode.rowIndex;//行索引
var curCol = order.parentNode.cellIndex;//列索引
alert(curRow+","+curCol);
if(grid.childNodes[0].childNodes[curRow-1]!=null){

grid.childNodes[0].childNodes[curRow-1].childNodes[curCol].childNodes[0].select();//选中上一行的文本框.
}
}else if(iekey==40){
var curCol = order.parentNode.parentNode.rowIndex;//行索引
var curRow = order.parentNode.cellIndex;//列索引

alert(curRow + "," + curCol);
if(grid.childNodes[0].childNodes[curRow-1]!=null){

grid.childNodes[0].childNodes[curRow].childNodes[curCol-1].childNodes[0].select();//选中下一列的文本框.
}

}
}
document.onkeydown = keyDown;
文本框总是不能获取光标。。。。。。。。。。。

再不行的话我要崩溃了...
[code="js"]<br> function keyDown(){<br> var iekey=event.keyCode;<br> var realkey=String.fromCharCode(event.keyCode);<br> //按&quot;Insert&quot;键表格获取光标事件<br> var grid=document.getElementById(&quot;myGrid&quot;);<br> var order=event.target||event.srcElement; //得到当前的文本框<br> if(order.tagName==&quot;INPUT&quot;){<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&gt;=0&amp;&amp;grid.childNodes[0].childNodes[curRow].childNodes[curCol].childNodes[0].tagName==&quot;INPUT&quot;){<br> grid.childNodes[0].childNodes[curRow].childNodes[curCol].childNodes[0].select();//选中上一行的文本框.<br> }<br> }else if(iekey==40){<br> if(++curRow&lt;=rowCount&amp;&amp;grid.childNodes[0].childNodes[curRow].childNodes[curCol].childNodes[0].tagName==&quot;INPUT&quot;){<br> grid.childNodes[0].childNodes[curRow].childNodes[curCol].childNodes[0].select();//选中下一行的文本框.<br> }<br> }else if(iekey==39){<br> if(++curCol&lt;=colCount&amp;&amp;grid.childNodes[0].childNodes[curRow].childNodes[curCol].childNodes[0].tagName==&quot;INPUT&quot;){<br> grid.childNodes[0].childNodes[curRow].childNodes[curCol].childNodes[0].select();//选中下列的文本框.<br> }<br> }else if(iekey==37){<br> if(--curCol&gt;=0&amp;&amp;grid.childNodes[0].childNodes[curRow].childNodes[curCol].childNodes[0].tagName==&quot;INPUT&quot;){<br> grid.childNodes[0].childNodes[curRow].childNodes[curCol].childNodes[0].select();//选中前列的文本框.<br> }<br> }<br> }<br> }<br> document.onkeydown = keyDown;<br>













测试用
测试用测试用测试用
[/code]

冒昧的问一下,楼主到底是要实现什么功能?这个功能在项目的模块中是用来干啥的?为什么一定要用方向键来控制光标的位置?

如果只是想要按键盘,光标移位动到另一个文本框中的话,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]
如果再出现错误的话,麻烦楼主把错误提示,错误代码一起贴出来。