TO:fantiny(乐于助人的菜鸟回归)
谢了TO:liufei8463(武汉小兵)
也谢了,虽然你没给什么提示或答案,但最起码给了我信心,google让我没信心了。
谢了TO:liufei8463(武汉小兵)
也谢了,虽然你没给什么提示或答案,但最起码给了我信心,google让我没信心了。
解决方案 »
- 处理多个翻转器的问题
- 为什么document.getElementById("kw") alert是null 呢??
- javascript问题,想用JS调用一个web service……
- 帮忙看这背景色怎么写呀,有点难的喽。。在线等。。。
- 怎么做出这种窗体类似自由落体反弹的效果?
- 攒分,没什么问的,实况12什么时候出?pes2008太垃圾了
- 请各位高手帮忙:怎样捕捉IE浏览器的关闭事件亦或怎样才能让IE浏览器的关闭(X)无效
- 如何修改梅花雨日历程序,使其只可以选择今日和未来两周的日期,其他的都不可选?
- 请问怎么在页面上画虚线,谢谢
- 怎样通过onMouseOver去更改表格单元格的背景图?????
- 输入问题?
- 有什么方法可以在Textarea指定位置地方插入图片呢
<input name="A01_1" type="text" maxlength="2" tabindex="1" onkeyup="AO1_keydown(this);" >
<input name="A02_1" type="text" maxlength="4" tabindex="2" onkeyup="AO2_keydown(this);">
<input name="A03_1" type="text" maxlength="2" tabindex="3"></FORM>
<script language="javascript">
<!--
function AO1_keydown(obj)
{
if(obj.value.length==obj.getAttribute("maxlength"))
testForm.A02_1.focus();
}
function AO2_keydown(obj)
{
if(obj.value.length==obj.getAttribute("maxlength"))
testForm.A03_1.focus();
}
//-->
</script>
不知道是不是上面的效果
参考这个:http://community.csdn.net/Expert/topic/5056/5056828.xml?temp=.294552
1。每个写fouse()我会,就是文本框太多了,不能每个来这样写,每个跳转不同,又得判断下一个是否disable,这个方法行不通
2。就算用fouse(),你的也存一个问题,就是当AO2已填写过,再在A01框按tab到A02时(这时录入的数据反选了),你再录入其它数据看看(改不了原来的数据,光标跳走了)
nextSibling,ie6有效。<SCRIPT>
// returns the list item labeled 'List Item 2'
var oSibling = oList.childNodes(0).nextSibling;
</SCRIPT><BODY>
<UL ID = oList>
<LI>List Item 1
<LI>List Item 2
<LI>List Item 3
</UL>
<BODY>
<input type="text" maxlength="4">
<input type="text" maxlength="5">
<input type="text" maxlength="7">
<script language="javascript">
var text = document.getElementsByTagName("input");
var j=0;
for(var i=0;i<text.length;i++){
if(text[i].type=="text"){
j=i;
text[i].index=i;
text[j].nextIndex=i;
text[i].onkeyup=function(){
if(this.value.length==this.maxLength && event.keyCode!=8 && event.keyCode!=46 && !(event.keyCode>=37 && event.keyCode<=40))
text[this.nextIndex+1].focus();
}
}
}
</script>以前有人写的,你看看。应该是个有bug的东西,你自己改一下。特别是隐藏控件的判断
欢迎指教!TO yizia(椅子) :感谢,有nextSibling应该是好搞点。但不太可能要求客户全部在IE6以上。TO fantiny(乐于助人的菜鸟回归) :
你提供的代码,昨天我已找到。它存在几个问题1.当AO2已填写过,再在A01框按tab到A02时(这时录入的数据反选了),你再录入其它数据看看(改不了原来的数据,光标跳走了),shift+光标也是
2.到最后一个时,会报错,应可以单独写吧。
3。循环设定,有时难以特殊处理。有没有更好的方法呢?
还有一个问题:
4、就是下一个控件是disable时,也有问题。
<input type="text" maxlength="4">
<input type="text" maxlength="5">
<input type="text" maxlength="7">
<script language="javascript">
var text = document.getElementsByTagName("input");
var j=0;
for(var i=0;i<text.length;i++){
if(text[i].type=="text"){
j=i;
text[i].index=i;
text[j].nextIndex=i;
text[i].onkeyup=function(){
if(event.keyCode==9)return;if(this.value.length==this.maxLength && event.keyCode!=8 && event.keyCode!=46 && !(event.keyCode>=37 && event.keyCode<=40))
if(text[this.nextIndex+1])text[this.nextIndex+1].focus();
}
}
}
</script>1、当为tab时直接返回不用执行。
2、不用另外写加一个判断就可以了。
3、是什么意思呢?
<input name="A01_1" type="text" maxlength="2" tabindex="1" >
<input name="A02_1" type="text" maxlength="4" tabindex="2" >
<input name="A03_1" type="text" maxlength="2" tabindex="3"></FORM>
<script language="javascript">
<!--
var len=testForm.length;
testForm[0].onkeyup=function()
{
if(testForm[0].value.length==testForm[0].getAttribute("maxlength"))
{
for(var j=0;j<len;j++)
{
if(j!=0)
{
if(testForm[j].getAttribute("tabindex")==testForm[0].getAttribute("tabindex")+1 && event.keyCode!=9)
{
testForm[j].focus();
}
}
}
}
}
testForm[1].onkeyup=function()
{
if(testForm[1].value.length==testForm[1].getAttribute("maxlength"))
{
for(var j=0;j<len;j++)
{
if(j!=1)
{
if(testForm[j].getAttribute("tabindex")==testForm[1].getAttribute("tabindex")+1 && event.keyCode!=9)
testForm[j].focus();
}
}
}
}testForm[2].onkeyup=function()
{
if(testForm[2].value.length==testForm[2].getAttribute("maxlength"))
{
for(var j=0;j<len;j++)
{
if(j!=1)
{
if(testForm[j].getAttribute("tabindex")==testForm[2].getAttribute("tabindex")+1 && event.keyCode!=9)
testForm[j].focus();
}
}
}
}
//-->
</script>
<FORM name="testForm" METHOD=POST ACTION="">
<input name="A01_1" type="text" maxlength="2" tabindex="1" >
<input name="A02_1" type="text" maxlength="4" tabindex="2" disabled>
<input name="A03_1" type="text" maxlength="2" tabindex="3"></FORM>
<script language="javascript">
<!--alert()
var len=testForm.length;
var q=1
testForm[0].onkeyup=function()
{
if(testForm[0].value.length==testForm[0].getAttribute("maxlength"))
{
for(var j=0;j<len;j++)
{
if(j!=0)
{
if(testForm[j].getAttribute("tabindex")==testForm[0].getAttribute("tabindex")+q && event.keyCode!=9)
{
if(testForm[j].disabled)
{
q++;
continue;
}
testForm[j].focus();
}
}
}
}
}
testForm[1].onkeyup=function()
{
if(testForm[1].value.length==testForm[1].getAttribute("maxlength"))
{
for(var j=0;j<len;j++)
{
if(j!=1)
{
if(testForm[j].getAttribute("tabindex")==testForm[1].getAttribute("tabindex")+q && event.keyCode!=9)
{
if(testForm[j].disabled)
{
q++;
continue;
}
testForm[j].focus();
}
}
}
}
}testForm[2].onkeyup=function()
{
if(testForm[2].value.length==testForm[2].getAttribute("maxlength"))
{
for(var j=0;j<len;j++)
{
if(j!=1)
{
if(testForm[j].getAttribute("tabindex")==testForm[2].getAttribute("tabindex")+q && event.keyCode!=9 )
{
if(testForm[j].disabled)
{
q++;
continue;
}
testForm[j].focus();
}
}
}
}
}
//-->
</script>
俺也凑个热闹!由于 JavaScript 无法模拟键盘点击事件!—— 谁要是知道能模拟键盘事件的话,一定告诉我!!!参考代码如下,已测试!
<body>
注册码:
<input id="A01" type="text" maxlength="2" tabindex="1" size="2" groupname="regist">-
<input id="A02" type="text" maxlength="4" tabindex="2" size="4" groupname="regist">-
<input id="A03" type="text" maxlength="2" tabindex="3" size="2" groupname="regist">-
<input id="A04" type="text" maxlength="6" tabindex="4" size="6" groupname="regist">
<input type="button" id="btnSubmit" value="提交">
<br />
看似注册码却没有事件:
<input id="b01" type="text" maxlength="2" tabindex="1" size="2">-
<input id="b02" type="text" maxlength="4" tabindex="2" size="4">-
<input id="b03" type="text" maxlength="2" tabindex="3" size="2">-
<input id="b04" type="text" maxlength="6" tabindex="4" size="6">
</body>
<script language="JavaScript">
<!--
document.getElementsByInputTypeAndGroupName = function(inputType, groupName)
{
var oCollection = document.getElementsByTagName("input");
var oTypeArray = new Array();
var oInput;
for (var i=0; i<oCollection.length; i++)
{
oInput = oCollection[i];
if (oInput.type==inputType && oInput.groupname==groupName)
{
oTypeArray.push(oInput);
}
} return oTypeArray;
};var txtArray = document.getElementsByInputTypeAndGroupName("text","regist");for (var t=0; t<txtArray.length; t++)
{
if (t < txtArray.length-1)
{
txtArray[t].nextFocus = txtArray[t+1]; txtArray[t].onkeyup = function()
{
if (this.value.length == this.maxLength)
{
this.nextFocus.focus();
}
};
}
}//-->
</script>
脚本不改<body>
注册码:
<input id="A01" type="text" maxlength="2" tabindex="1" size="2" groupname="regist">-
<input id="A02" type="text" maxlength="4" tabindex="2" size="4" groupname="regist">-
<input id="A03" type="text" maxlength="2" tabindex="3" size="2" groupname="regist">-
<input id="A04" type="text" maxlength="6" tabindex="4" size="6" groupname="regist">
<input type="button" id="btnSubmit" tabindex="5" value="提交">
<br />
看似注册码却没有事件:
<input id="b01" type="text" maxlength="2" tabindex="6" size="2">-
<input id="b02" type="text" maxlength="4" tabindex="7" size="4">-
<input id="b03" type="text" maxlength="2" tabindex="8" size="2">-
<input id="b04" type="text" maxlength="6" tabindex="9" size="6">
</body>
首先非常非常感谢你的不厌其详地帮助我。当我把form改成
<FORM name="testForm" METHOD=POST ACTION="">
<input name="A01_1" type="text" maxlength="2" tabindex="1" >
<input name="A02_0" type="text" maxlength="4" tabindex="2" disabled>
<input name="A02_1" type="text" maxlength="4" tabindex="3">
<input name="A03_1" type="text" maxlength="2" tabindex="4">
</FORM>
发现不行,我就没继续试你的代码了。因为如果象你这样写(当然或者可以用循环设事件),我不如这样:
$F("A01_1").onkeyup=function(){
if ($F("A02_0").disable){
$F("A02_1").focus();
}else{
$F("A02_0").focus();
}
}
也是每个控件写,或许思路更清析。
基本功能实现了,可以根据需要自己改变一下<html>
<head>
<script language="JavaScript">
<!--
function initIpt(){
var ipts = document.getElementsByTagName("input");
for(var i=0,j=ipts.length;i<j;i++){
if(ipts[i].type == "text")
ipts[i].onkeyup =
function(iptNext){
return function(){
if( (this.value.length == this.getAttribute("maxlength")) && iptNext){
iptNext.focus();
}
};
}(ipts[i+1]);
}
}
//-->
</script>
</head>
<body onload="initIpt()">
<FORM name="testForm" METHOD=POST ACTION="">
<input id="A01_1" type="text" maxlength="2" tabindex="1">
<input id="A02_1" type="text" maxlength="2" tabindex="2">
<input type="text" maxlength="2" tabindex="3">
<input name="A03_1" type="text" maxlength="2" tabindex="4">
</FORM>
</body>
</html>
<html>
<head>
<script type="text/javascript">
function checkLen(x,y)
{
if (y.length==x.maxLength)
{
var next=x.tabIndex
if (next<document.getElementById("myForm").length)
{
document.getElementById("myForm").elements[next].focus()
}
}
}
</script>
</head><body>
<p>This script automatically jumps to the next field when the current field's maxlength has been reached:</p><form id="myForm">
<input size="3" tabindex="1" maxlength="3" onkeyup="checkLen(this,this.value)">
<input size="2" tabindex="2" maxlength="2" onkeyup="checkLen(this,this.value)">
<input size="3" tabindex="3" maxlength="3" onkeyup="checkLen(this,this.value)">
</form>
</body></html>
<input type="text" maxlength="4">
<input type="text" maxlength="5">
<input type="text" maxlength="7">
<script language="javascript">
var text = document.getElementsByTagName("input");
var j=0;
for(var i=0;i<text.length;i++){
if(text[i].type=="text"){
j=i;
text[i].index=i;
text[j].nextIndex=i;
text[i].onkeyup=function(){
if(event.keyCode==9)return;if(this.value.length==this.maxLength && event.keyCode!=8 && event.keyCode!=46 && !(event.keyCode>=37 && event.keyCode<=40))
if(text[this.nextIndex+1])text[this.nextIndex+1].focus();
}
}
}
</script>
<FORM name="testForm" METHOD=POST ACTION="">
<input name="A01_1" type="text" maxlength="2" tabindex="1" >
<input name="A02_0" type="text" maxlength="4" tabindex="3" disabled>
<input name="A02_1" type="text" maxlength="4" tabindex="2">
<input name="A03_1" type="text" maxlength="2" tabindex="4">
</FORM><script language="javascript">
<!--
init();
/*³õʼ»¯Ê¼þ*/
function init()
{
var len=testForm.length;
for(var i=0;i<len;i++)
{
testForm[i].attachEvent("onkeyup",autoFocus)
}
}/*onkeyupʼþº¯Êý*/
function autoFocus()
{
var q=1;
var len=testForm.length;
var obj=event.srcElement;
if(obj.value.length==obj.getAttribute("maxlength"))
{
for(var j=0;j<len;j++)
{
if(testForm[j].getAttribute("tabindex")==obj.getAttribute("tabindex")+q && event.keyCode!=9)
{
if(testForm[j].disabled)
{
q++;
continue;
}
testForm[j].focus();
}
}
}
}
//-->
</script>
俺也凑个热闹!由于 JavaScript 无法模拟键盘点击事件!—— 谁要是知道能模拟键盘事件的话,一定告诉我!!!参考代码如下,已测试!
<body>
注册码:
<input id="A01" type="text" maxlength="2" tabindex="1" size="2" groupname="regist">-
<input id="A02" type="text" maxlength="4" tabindex="2" size="4" groupname="regist">-
<input id="A03" type="text" maxlength="2" tabindex="3" size="2" groupname="regist">-
<input id="A04" type="text" maxlength="6" tabindex="4" size="6" groupname="regist">
<input type="button" id="btnSubmit" value="提交">
<br />
看似注册码却没有事件:
<input id="b01" type="text" maxlength="2" tabindex="1" size="2">-
<input id="b02" type="text" maxlength="4" tabindex="2" size="4">-
<input id="b03" type="text" maxlength="2" tabindex="3" size="2">-
<input id="b04" type="text" maxlength="6" tabindex="4" size="6">
</body>
<script language="JavaScript">
<!--
document.getElementsByInputTypeAndGroupName = function(inputType, groupName)
//////////////////////////上面这行代码什么意思啊////////////////////////////
//这段代码的用处是什么呢,谁能给我讲解下吗////////////////////////
{
var oCollection = document.getElementsByTagName("input");
var oTypeArray = new Array();
var oInput;
for (var i=0; i<oCollection.length; i++)
{
oInput = oCollection[i];
if (oInput.type==inputType && oInput.groupname==groupName)
{
oTypeArray.push(oInput);
}
} return oTypeArray;
};
///////////////////////到这里为止 感觉上下代码没什么联系啊////////////////
var txtArray = document.getElementsByInputTypeAndGroupName("text","regist");for (var t=0; t<txtArray.length; t++)
{
if (t < txtArray.length-1)
{
txtArray[t].nextFocus = txtArray[t+1]; txtArray[t].onkeyup = function()
{
if (this.value.length == this.maxLength)
{
this.nextFocus.focus();
}
};
}
}//-->
</script>
//////////////////////////上面这行代码什么意思啊////////////////////////////
子鹿 可教也!哈document.getElementsByInputTypeAndGroupName = function(inputType, groupName)
意思是:为 本页的 document 对象动态添加一个名为 getElementsByInputTypeAndGroupName 的方法,同时可接受两个参数。
分别解释一下:
getElementsByInputTypeAndGroupName 即 根据 input 标记的 type 属性(标准)和 groupname 属性(自定义)获取相应的 元素数组。
参数
inputType —— input 标记的 type 属性(标准);
groupName —— input 标记的 groupname 属性(自定义)。当然写成独立的 function 完全没问题,之所以赋给 document 对象作为动态添加的方法,完全是个人喜好,更符合面向的对象的思路吧!哈
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- DW6 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>shawl.qiu template</title>
<style type="text/css">
/* <![CDATA[ *//* ]]> */
</style>
<script type="text/javascript">
//<![CDATA[
function fJpTo(o, oForm){
var temp=document.getElementById(oForm.name).getElementsByTagName('input');
var temp1='';
var mLen=o.getAttribute('maxlength');
for (var i=0; i<temp.length; i++){
if(o.value.length==mLen){
if(temp[i].name==o.name){
temp1=i+1;
if(temp1<temp.length){
document.getElementById(temp[temp1].name).focus();
}
}
}
}
}
//]]>
</script>
</head>
<body>
<FORM name="testForm" METHOD=POST ACTION="">
<input name="A01_1" type="text" maxlength="2" tabindex="1" onkeyup="fJpTo(this, this.form)">
<input name="A02_1" type="text" maxlength="2" tabindex="2" onkeyup="fJpTo(this, this.form)">
<input name="unnamed" type="text" maxlength="2" tabindex="3" onkeyup="fJpTo(this, this.form)">
<input name="A03_1" type="text" maxlength="2" tabindex="4" onkeyup="fJpTo(this, this.form)">
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- DW6 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>shawl.qiu template</title>
<style type="text/css">
/* <![CDATA[ *//* ]]> */
</style>
<script type="text/javascript">
//<![CDATA[
function fJpTo(o, oForm){
var temp=document.getElementById(oForm.name).getElementsByTagName('input');
var temp1='';
var mLen=o.getAttribute('maxlength');
var tix=o.getAttribute('tabindex');
for (var i=0; i<temp.length; i++){
if(o.value.length==mLen){
temp1=document.getElementById(temp[i].name).getAttribute('tabindex')
if(temp1==tix+1){
document.getElementById(temp[i].name).focus()
}
}
}
}
//]]>
</script>
</head>
<body>
<FORM name="testForm" METHOD=POST ACTION="">
<input name="A01_1" type="text" maxlength="2" tabindex="1" onkeyup="fJpTo(this, this.form)">
<input name="unnamed" type="text" maxlength="2" tabindex="3" onkeyup="fJpTo(this, this.form)">
<input name="A03_1" type="text" maxlength="2" tabindex="4" onkeyup="fJpTo(this, this.form)">
<input name="A02_1" type="text" maxlength="2" tabindex="2" onkeyup="fJpTo(this, this.form)">
</body>
</html>
你说的是最接近这个要求的,但由于还有其它要求,似乎循环赋方法行不通。唉...TO:btbtd(博学笃志, 切问近思; 神闲气静, 智深勇沉.-围炉夜话)
现在一般在IE上运行,如果IE都过不了,就谈不上FF和其它了。你的代码连上面说的中间有disabled都没处理。================================================================================
TO:大家
现时情况是这样的
1.自动跳转是“专业”录入员要求的做法,他们连回车都不想按了。2.由于有填写规则的影响,会根据其中一些填写值来改变其它录入框的disabled状态,所以循环势必会引出特殊的判断。当然不排除可行的方案,但在我们开发人员角度看,是否循环就比直接每个写事件会简单通用呢,如果不是那循环的逻辑不是增加了复杂性了吗?3.本人认为不应从循环赋通用方法这个方向上想解决方法,应从模拟TAB按键(比如fireEvent)上想可能好些。4.现在不是要差不多的代码,因为我自已这两天已试过N个,是要完成解决的方案,最起码:
1)不影响原来的tab使用
2)不会因规则导致的未知个数的disable而影响
的基础上实现上面的功能。
===========================================================================继续等行传说的高手......