我在网上下了个demo,稍微改了下,确实好用,代码如下:<html>
<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>
<select name="a" onfocus="setobj(this)">
<option value=1>aaa
<option value=2>bbb
</select>
</td>
<td>
<input type="text" name="textfield2" onfocus="setobj(this)">
</td>
<td>
<input type="text" name="textfield3" onfocus="setobj(this)">
</td>
</tr>
<tr>
<td>
<select name="b" onfocus="setobj(this)">
<option value=1>aaa
<option value=2>bbb
</select>
</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>
但是当我把它用在自己的页面里,就发生了错误,我的页面代码:<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language="javascript">
var cols=6;
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 class="list" cellspacing="0" cellpadding="0">
<tr class="column">
<td width="15%"> 状态 </td>
<td width="15%"><div class="column" onclick="doOrderBy('flow')">流量(m3/h) <span class="arrow"></span></div></td>
<td width="15%"><div class="column" onclick="doOrderBy('head')">扬程(m) <span class="arrow"></span></div></td>
<td width="15%"><div class="column" onclick="doOrderBy('power')">功率(kw) <span class="arrow"></span></div></td>
<td width="15%"><div class="column" onclick="doOrderBy('efficency')">效率(%) <span class="arrow"></span></div></td>
</tr> <tr id="214" class="list" >
<td>
<select onfocus="setobj(this)">
<option value="4">忽略
<option value="6">更新
<option value="8">删除
</select>
</td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="flow.0" value="372.99" size="10" onChange="doModify(0)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="head.0" value="50.5" size="10" onChange="doModify(0)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="power.0" value="747.2" size="10" onChange="doModify(0)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="efficency.0" value="111" size="10" onChange="doModify(0)"> </td>
<input type="hidden" name="bump_curve_id.0" value="214">
</tr>
<tr id="215" class="listx" >
<td>
<select onfocus="setobj(this)">
<option value="4">忽略
<option value="6">更新
<option value="8">删除
</select>
</td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="flow.1" value="4352" size="10" onChange="doModify(1)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="head.1" value="48" size="10" onChange="doModify(1)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="power.1" value="843.71" size="10" onChange="doModify(1)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="efficency.1" value="222" size="10" onChange="doModify(1)"> </td>
<input type="hidden" name="bump_curve_id.1" value="215">
</tr>
<tr id="216" class="list" >
<td>
<select onfocus="setobj(this)">
<option value="4">忽略
<option value="6">更新
<option value="8">删除
</select>
</td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="flow.2" value="4766" size="10" onChange="doModify(2)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="head.2" value="46" size="10" onChange="doModify(2)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="power.2" value="907.04" size="10" onChange="doModify(2)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="efficency.2" value="333" size="10" onChange="doModify(2)"> </td>
<input type="hidden" name="bump_curve_id.2" value="216">
</tr>
</table>
</form>
用Ctrl+方向键可以方便的在控件中移动,你也可以自己改成不要Ctrl的。
</body>
</html>
<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>
<select name="a" onfocus="setobj(this)">
<option value=1>aaa
<option value=2>bbb
</select>
</td>
<td>
<input type="text" name="textfield2" onfocus="setobj(this)">
</td>
<td>
<input type="text" name="textfield3" onfocus="setobj(this)">
</td>
</tr>
<tr>
<td>
<select name="b" onfocus="setobj(this)">
<option value=1>aaa
<option value=2>bbb
</select>
</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>
但是当我把它用在自己的页面里,就发生了错误,我的页面代码:<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language="javascript">
var cols=6;
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 class="list" cellspacing="0" cellpadding="0">
<tr class="column">
<td width="15%"> 状态 </td>
<td width="15%"><div class="column" onclick="doOrderBy('flow')">流量(m3/h) <span class="arrow"></span></div></td>
<td width="15%"><div class="column" onclick="doOrderBy('head')">扬程(m) <span class="arrow"></span></div></td>
<td width="15%"><div class="column" onclick="doOrderBy('power')">功率(kw) <span class="arrow"></span></div></td>
<td width="15%"><div class="column" onclick="doOrderBy('efficency')">效率(%) <span class="arrow"></span></div></td>
</tr> <tr id="214" class="list" >
<td>
<select onfocus="setobj(this)">
<option value="4">忽略
<option value="6">更新
<option value="8">删除
</select>
</td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="flow.0" value="372.99" size="10" onChange="doModify(0)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="head.0" value="50.5" size="10" onChange="doModify(0)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="power.0" value="747.2" size="10" onChange="doModify(0)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="efficency.0" value="111" size="10" onChange="doModify(0)"> </td>
<input type="hidden" name="bump_curve_id.0" value="214">
</tr>
<tr id="215" class="listx" >
<td>
<select onfocus="setobj(this)">
<option value="4">忽略
<option value="6">更新
<option value="8">删除
</select>
</td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="flow.1" value="4352" size="10" onChange="doModify(1)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="head.1" value="48" size="10" onChange="doModify(1)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="power.1" value="843.71" size="10" onChange="doModify(1)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="efficency.1" value="222" size="10" onChange="doModify(1)"> </td>
<input type="hidden" name="bump_curve_id.1" value="215">
</tr>
<tr id="216" class="list" >
<td>
<select onfocus="setobj(this)">
<option value="4">忽略
<option value="6">更新
<option value="8">删除
</select>
</td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="flow.2" value="4766" size="10" onChange="doModify(2)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="head.2" value="46" size="10" onChange="doModify(2)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="power.2" value="907.04" size="10" onChange="doModify(2)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="efficency.2" value="333" size="10" onChange="doModify(2)"> </td>
<input type="hidden" name="bump_curve_id.2" value="216">
</tr>
</table>
</form>
用Ctrl+方向键可以方便的在控件中移动,你也可以自己改成不要Ctrl的。
</body>
</html>
是不能够focus的
LZ可以判断下,做下特殊处理
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language="javascript">
var cols=6;
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){
if(i%cols==0){
document.forms[0].elements[i-2].focus();
}else{
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%cols==cols-2){
if(i<document.forms[0].elements.length-2){
document.forms[0].elements[i+2].focus();
}
} else{
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 class="list" cellspacing="0" cellpadding="0">
<tr class="column">
<td width="15%"> 状态 </td>
<td width="15%"><div class="column" onclick="doOrderBy('flow')">流量(m3/h) <span class="arrow"></span></div></td>
<td width="15%"><div class="column" onclick="doOrderBy('head')">扬程(m) <span class="arrow"></span></div></td>
<td width="15%"><div class="column" onclick="doOrderBy('power')">功率(kw) <span class="arrow"></span></div></td>
<td width="15%"><div class="column" onclick="doOrderBy('efficency')">效率(%) <span class="arrow"></span></div></td>
</tr> <tr id="214" class="list" >
<td>
<select onfocus="setobj(this)">
<option value="4">忽略
<option value="6">更新
<option value="8">删除
</select>
</td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="flow.0" value="372.99" size="10" onChange="doModify(0)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="head.0" value="50.5" size="10" onChange="doModify(0)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="power.0" value="747.2" size="10" onChange="doModify(0)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="efficency.0" value="111" size="10" onChange="doModify(0)"> </td>
<input type="hidden" name="bump_curve_id.0" value="214">
</tr>
<tr id="215" class="listx" >
<td>
<select onfocus="setobj(this)">
<option value="4">忽略
<option value="6">更新
<option value="8">删除
</select>
</td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="flow.1" value="4352" size="10" onChange="doModify(1)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="head.1" value="48" size="10" onChange="doModify(1)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="power.1" value="843.71" size="10" onChange="doModify(1)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="efficency.1" value="222" size="10" onChange="doModify(1)"> </td>
<input type="hidden" name="bump_curve_id.1" value="215">
</tr>
<tr id="216" class="list" >
<td>
<select onfocus="setobj(this)">
<option value="4">忽略
<option value="6">更新
<option value="8">删除
</select>
</td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="flow.2" value="4766" size="10" onChange="doModify(2)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="head.2" value="46" size="10" onChange="doModify(2)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="power.2" value="907.04" size="10" onChange="doModify(2)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="efficency.2" value="333" size="10" onChange="doModify(2)"> </td>
<input type="hidden" name="bump_curve_id.2" value="216">
</tr>
</table>
</form>
用Ctrl+方向键可以方便的在控件中移动,你也可以自己改成不要Ctrl的。
</body>
</html>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language="javascript">
var cols=6;
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){//←
var n = i-1;
var d = document.forms[0].elements[n];
if(!d) return;
while(d.type == "hidden" && n>0){
n--;
d = document.forms[0].elements[n];
if(!d) break;
}
if(n>=0 && document.forms[0].elements[n].type!="hidden") document.forms[0].elements[n].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){
var n = i+1;
var d = document.forms[0].elements[n];
while(d.type == "hidden" && n<document.forms[0].elements.length){
n++;
d = document.forms[0].elements[n];
if(!d) break;
}
if(n<document.forms[0].elements.length && document.forms[0].elements[n].type!="hidden") document.forms[0].elements[n].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 class="list" cellspacing="0" cellpadding="0">
<tr class="column">
<td width="15%"> 状态 </td>
<td width="15%"><div class="column" onclick="doOrderBy('flow')">流量(m3/h) <span class="arrow"></span></div></td>
<td width="15%"><div class="column" onclick="doOrderBy('head')">扬程(m) <span class="arrow"></span></div></td>
<td width="15%"><div class="column" onclick="doOrderBy('power')">功率(kw) <span class="arrow"></span></div></td>
<td width="15%"><div class="column" onclick="doOrderBy('efficency')">效率(%) <span class="arrow"></span></div></td>
</tr> <tr id="214" class="list" >
<td>
<select onfocus="setobj(this)">
<option value="4">忽略
<option value="6">更新
<option value="8">删除
</select>
</td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="flow.0" value="372.99" size="10" onChange="doModify(0)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="head.0" value="50.5" size="10" onChange="doModify(0)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="power.0" value="747.2" size="10" onChange="doModify(0)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="efficency.0" value="111" size="10" onChange="doModify(0)"> </td>
<input type="hidden" name="bump_curve_id.0" value="214">
</tr>
<tr id="215" class="listx" >
<td>
<select onfocus="setobj(this)">
<option value="4">忽略
<option value="6">更新
<option value="8">删除
</select>
</td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="flow.1" value="4352" size="10" onChange="doModify(1)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="head.1" value="48" size="10" onChange="doModify(1)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="power.1" value="843.71" size="10" onChange="doModify(1)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="efficency.1" value="222" size="10" onChange="doModify(1)"> </td>
<input type="hidden" name="bump_curve_id.1" value="215">
</tr>
<tr id="216" class="list" >
<td>
<select onfocus="setobj(this)">
<option value="4">忽略
<option value="6">更新
<option value="8">删除
</select>
</td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="flow.2" value="4766" size="10" onChange="doModify(2)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="head.2" value="46" size="10" onChange="doModify(2)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="power.2" value="907.04" size="10" onChange="doModify(2)"> </td>
<td nowrap><input type="text" class="text" onfocus="setobj(this)" name="efficency.2" value="333" size="10" onChange="doModify(2)"> </td>
<input type="hidden" name="bump_curve_id.2" value="216">
</tr>
</table>
</form>
用Ctrl+方向键可以方便的在控件中移动,你也可以自己改成不要Ctrl的。
</body>
</html>
这个问题只要在keyDown函数的最后加上return false;即可
即取消此次按键事件