提供两个函数,可以很方便的使用
<input name=txt1 value=free onkeydown=moveCursor(this)>
<input name=txt2 value=falcon onkeydown=moveCursor(this)>
<script>
function moveCursor(obj){
if(obj.name=="txt1"&&event.keyCode==39&&getCursorPos(obj)==obj.value.length){event.returnValue=false;setCursorPos(txt2,0);} if(obj.name=="txt2"&&event.keyCode==37&&getCursorPos(obj)==0){event.returnValue=false;setCursorPos(txt1,txt1.value.length);}
}
function getCursorPos(obj)
{
obj.focus();
var currentRange=document.selection.createRange();
var workRange=currentRange.duplicate();
obj.select();
var allRange=document.selection.createRange();
var pos=0;
while(workRange.compareEndPoints("StartToStart",allRange)>0)
{
workRange.moveStart("character",-1);
pos++;
}
currentRange.select();
return pos;
}
function setCursorPos(obj,pos)
{
var rng =obj.createTextRange();
rng.moveStart('character',pos);
rng.collapse(true);
rng.select();
}
</script>
<input name=txt1 value=free onkeydown=moveCursor(this)>
<input name=txt2 value=falcon onkeydown=moveCursor(this)>
<script>
function moveCursor(obj){
if(obj.name=="txt1"&&event.keyCode==39&&getCursorPos(obj)==obj.value.length){event.returnValue=false;setCursorPos(txt2,0);} if(obj.name=="txt2"&&event.keyCode==37&&getCursorPos(obj)==0){event.returnValue=false;setCursorPos(txt1,txt1.value.length);}
}
function getCursorPos(obj)
{
obj.focus();
var currentRange=document.selection.createRange();
var workRange=currentRange.duplicate();
obj.select();
var allRange=document.selection.createRange();
var pos=0;
while(workRange.compareEndPoints("StartToStart",allRange)>0)
{
workRange.moveStart("character",-1);
pos++;
}
currentRange.select();
return pos;
}
function setCursorPos(obj,pos)
{
var rng =obj.createTextRange();
rng.moveStart('character',pos);
rng.collapse(true);
rng.select();
}
</script>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language="javascript">
var cols=3;
var obj;
var CanMove=false;
var key;
function setobj(input){
obj=input;
}function init(){
document.onkeydown=keyDown;
document.onkeyup=keyUp;
}function keyDown(DnEvents){
var key=window.event.keyCode;
if(key==116){
window.event.keyCode=0;
return false;
}
if(key==8){
if(event.srcElement.tagName!="INPUT"){
event.cancelBubble = true;
event.returnValue = false;
return false;
}
}
var IsCtrl=window.event.ctrlKey;
if(!IsCtrl){
return;
}
for(var i=0;i<document.forms[0].elements.length;i++){
if(document.forms[0].elements[i]==obj){
if (key == 37){//←
if(i>0){
document.forms[0].elements[i-1].focus();
}
}
if (key == 38){//↑
if(i>cols-1){
document.forms[0].elements[i-cols].focus();
}
}
if (key == 39){//→
if(i<document.forms[0].elements.length-1){
document.forms[0].elements[i+1].focus();
}
}
if (key == 40){//↓
if(i<document.forms[0].elements.length-cols){
document.forms[0].elements[i+cols].focus();
}
}
}
}}function keyUp(UpEvents){
return false;
}
</script>
</head><body bgcolor="#FFFFFF" text="#000000" onload="init()">
<form>
<table border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td>
<input type="text" name="textfield" onfocus="setobj(this)">
</td>
<td>
<input type="text" name="textfield2" onfocus="setobj(this)">
</td>
<td>
<input type="text" name="textfield3" onfocus="setobj(this)">
</td>
</tr>
<tr>
<td>
<input type="text" name="textfield5" onfocus="setobj(this)">
</td>
<td>
<input type="text" name="textfield6" onfocus="setobj(this)">
</td>
<td>
<input type="text" name="textfield7" onfocus="setobj(this)">
</td>
</tr>
</table>
</form>
用Ctrl+方向键可以方便的在控件中移动,你也可以自己改成不要Ctrl的。
</body>
</html>
to meizz(梅花雨) :其实我有判断光标位置的方法,但是结合左右方向键时就不太好用,所以我将左右键的event屏蔽,自己写了一个移动光标的方法代替本身的事件响应,就ok了。再次感谢大家,给分先!