function backFocus(obj){
var i=obj.sourceIndex - 1;
if(i <= 0) return;
var p = document.all(i);
if(p && p.tagName == "INPUT" && p.disabled == false)
p.focus();
else
backFocus(p);
}
var i=obj.sourceIndex - 1;
if(i <= 0) return;
var p = document.all(i);
if(p && p.tagName == "INPUT" && p.disabled == false)
p.focus();
else
backFocus(p);
}
解决方案 »
- js 获取iframe的dom
- 页面关闭时,自动弹出是否设置为主页
- 求jquery1.3.2 浮动层代码
- 求助:购物车清空和在空状态时,页面没有跳转。。。。
- jquery的printArea打印控件会不会因为css文件而导致加载不成功?
- 如何获取某个对象在浏览器窗口中的实际位置?
- 100分求一个能够合并、拆分表格单元的表格编辑控件,谢谢!
- innerHTML的问题?高手看看!
- Naola2001(摆地摊)新做的日历控件,挑战"meizz(梅花雪疏影横斜)".整合时间输入部分.哈哈,顺便送分.
- 急急....怎樣在打印頁面時不打印出綱子來呢?
- 如何打印指定框架?
- split能不能把字符串从右边开始取值再给数组?~~
<div style="display:none">
<input type="text">
</div>
是否有一个属性或其他方式能判断某个HTML对象是否可以执行focus()方法
var i=obj.sourceIndex - 1;
if(i <= 0) return;
var p = document.all(i); if(p && p.tagName == "INPUT" && p.disabled == false && isVisible(p))
p.focus();
else
backFocus(p);
}
function isVisible(o){
while(o)
{
if(o.tagName){
if(o.currentStyle.display == "none" || o.currentStyle.visibility == "hidden")
{
return false;
}
}
o = o.parentNode;
}
return true;
}
var i=obj.sourceIndex - 1; //直接取目标对象序号
view.innerHTML = '';
while(document.all(i).tagName!="BODY") {
try {
document.all(i).focus();
}catch(e) {
i--;
}
}
}
这个函数修改的与在你上一贴中回复的不太一样
考虑到实际上情况还要复杂的多,所以仍需要进一步修改。但思路是一致的
GetItemByTagName
再聚焦一下,就好了呀.
<body >
<form name="frm" >
<input type="text" value=test>
<input type="text" value=test>
<input type="text" value=test>
<input type="text" value=test>
<input type="text" value=test>
<input type="text" disabled value=disabled >
<input type="text" value=test>
<input type="text" value=test>
<input type="text" value=test>
<input type="text" value=test>
<input type="text" value=test>
</form >
</body>
<script language="javascript">
var tabKeyContainer=document.frm;function setDescTabIndex()
{
var elementObjs=tabKeyContainer.elements;
var tempTabIndex=1;
for(var i=elementObjs.length-1;i>-1 ;i--) {
elementObjs[i].tabIndex=tempTabIndex++;
}
// 以下三句是为ie的某些bug而加
var tempInput=document.createElement("<input type=hidden>");
tabKeyContainer.appendChild(tempInput);
tempInput.removeNode(true);
}
function clearTabIndex()
{
var elementObjs=tabKeyContainer.elements;
for(var i=elementObjs.length-1;i>-1;i--) elementObjs[i].removeAttribute("tabIndex");
}
function documentKeyDown(){
var SrcElement;
SrcElement = window.event.srcElement;
if(window.event.keyCode == 13 && SrcElement.type!="button" && SrcElement.type!="textarea" ){
//回车键替换Tab
window.event.keyCode = 9;
}else if(window.event.keyCode==37){
//右方向键
setDescTabIndex();
window.event.keyCode=9;
setTimeout("clearTabIndex()",1)
}else if(window.event.keyCode==39){
//右方向键
window.event.keyCode=9;
}
}document.onkeydown=documentKeyDown;</script></html>
这样就好判断这个东西是否是可以输入,并且是你需要输入的input
使用TagName提取出名称 说句实在话,我用了这么久,没有在网络上见过楼主这样的功能,
但这个需求由来已久,很多人略过而已.支持搂主
希望写成功后发个copy给我,或者我们还可以交流[email protected]
在input里/textarea里,左右键本身就是有用的,并且使用频率远远大于tab键,
用左右键来实现tab和shift+tab的功能,会丧失掉这些功能,
如果某个不知道使用tab键的客户要求这样做,
那就得尝试说服他:不能因为满足他的一点创意而让更多的用户有损失。如果我们拿excel当榜样
请注意,excel并没有实现“在单元格里左右键当tab键用”,
就算是单元格里内容全选或光标在内容的最前面或最后面的时候,也没有实现“在单元格里左右键当tab键用”,
excel只是加了一个整个单元格的选择的功能(选择整个单元格,还没有到单元格里面去)
只是在这个时候,左右键类似于tab键。
JK_10000(JK) ( ) 信誉:121
测试通过
而且,更多情况,需要支持左右键和上下键.而且里面不单纯是input,还有其他描述的标签,
所以,如果要实现通用的,JK_10000(JK)的例子还需要改进.
-------左右键在input-text里有用,所以强烈建议抵制“左右键来实现tab和shift+tab的功能”
上下键对select/textarea已经有用,
在input里倒是可以支持,见以下示例:
---------------
动态明细示例
http://jkisjk.spaces.live.com/blog/cns!758CACE25E89DD3B!377.entry
左右键在input-text里有用,所以强烈建议抵制“左右键来实现tab和shift+tab的功能”
上下键对select/textarea已经有用,
------------------------------------------------
支持,除非特殊情况特殊用.
呵呵..
<body >
<form name="frm" >
<input type="text" value=test>
<input type="text" value=test>
<input type="text" value=test>
<input type="text" value=test>
<input type="text" value=test>
<input type="text" disabled value=disabled >
<input type="text" value=test>
<input type="text" value=test>
<input type="text" value=test>
<input type="text" value=test>
<input type="text" value=test>
</form >
</body>
<script language="javascript">
var tabKeyContainer=document.frm;function setDescTabIndex()
{
var elementObjs=tabKeyContainer.elements;
var tempTabIndex=1;
for(var i=elementObjs.length-1;i>-1 ;i--) {
elementObjs[i].tabIndex=tempTabIndex++;
}
// 以下三句是为ie的某些bug而加
var tempInput=document.createElement("<input type=hidden>");
tabKeyContainer.appendChild(tempInput);
tempInput.removeNode(true);
}
function clearTabIndex()
{
var elementObjs=tabKeyContainer.elements;
for(var i=elementObjs.length-1;i>-1;i--) elementObjs[i].removeAttribute("tabIndex");
}
function documentKeyDown(){
var SrcElement;
SrcElement = window.event.srcElement;
if(window.event.keyCode == 13 && SrcElement.type!="button" && SrcElement.type!="textarea" ){
//回车键替换Tab
window.event.keyCode = 9;
}else if(window.event.keyCode==37){
//右方向键
setDescTabIndex();
window.event.keyCode=9;
setTimeout("clearTabIndex()",1)
}else if(window.event.keyCode==39){
//右方向键
window.event.keyCode=9;
}
}document.onkeydown=documentKeyDown;</script></html>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> - http://www.never-online.net </title>
<meta http-equiv="ImageToolbar" content="no" />
<script type="text/javascript">
//<![CDATA[
function tabDemo() {
var doc_all = document.getElementsByTagName("*");
var curtEl = event.srcElement;
var nKeycode = event.keyCode;
if (nKeycode==39) { doit(1); return; }
else if (nKeycode==37) { doit(-1); return; }
function doit(n) {
for (var i=0; i<doc_all.length; i++) {
if (curtEl==doc_all[i]) {
try {
var j = i+(n);
j>=doc_all.length?j=doc_all.length-1:j<0?j=0:"";
doc_all[j].focus();
} catch(ex) {
n>0?doit(n+1):doit(n-1);
break;
}
}
}
}
}
document.onkeydown=tabDemo;
//]]>
</script>
</head> <body id="www.never-online.net">
<input/>
<input disabled=true value='disabled'/>
<input disabled=true value='disabled'/>
<input/>
<input/>
<textarea></textarea>
</body>
</html>
JK的跟贴会损失^Z的功能,效率也有待改进,
xuzuning的贴贴把ie跑死了(不知是不我我跑错了代码),
ice_berg16的方法似乎实现不了select()的功能,改了一下没实现,可能得加些代码来处理ie的这个bug。
<html>
<body><form>
<input type="text" value="test" >
<input type="text" value="test" >
<input type="text" value="test" >
<input type="text" disabled value="disabled" >
<input type="text" > <br>
<input type="text" value="test" >
<input type="text" value="test" >
<input type="text" value="test" >
<input type="text" disabled value="disabled" >
<input type="text" > <br></form>
</body></html><script language="javascript">
function documentKeyDown(){
var srcElementObj = window.event.srcElement;
if(srcElementObj.tagName != "INPUT" && srcElementObj.tagName != "SELECT" ) return;
if(window.event.keyCode==37){
//左方向键
backFocus(event.srcElement);
event.returnValue=false;
}else if(window.event.keyCode==39){
//右方向键
window.event.keyCode=9;
}
}
function backFocus(obj){
var elementObjs=obj.form.elements;
var startToTryFocus=false;
for(var i=elementObjs.length-1;i>-1 ;i--) {
if(startToTryFocus){
try{
elementObjs[i].focus();
elementObjs[i].select();
break;
}
catch (ex){}
}
else{
if(elementObjs[i]==obj)startToTryFocus=true;
}
}
}
document.onkeydown=documentKeyDown;</script>
<body><form name="mm">
<input type="text" value="test" >
<input type="text" value="test" >
<input type="text" value="test" >
<input type="text" disabled value="disabled" >
<input type="text" > <br>
<input type="text" value="test" >
<input type="text" value="test" >
<input type="text" value="test" >
<input type="text" disabled value="disabled" >
<input type="text" > <br>
<span style="display: none"><input/></span></form>
</body></html><SCRIPT LANGUAGE="JavaScript">
<!--
function getElements()
{
var s = document.forms["mm"].elements;
var a = [];
for(var i=0; i<s.length; i++)
{
if((s[i].tagName=="INPUT"
|| s[i].tagName=="SELECT")
&& !s[i].disabled
&& s[i].clientWidth>0)
a[a.length] = s[i];
}
return a;
}
if(typeof(Array.prototype.indexOf)!="function")
{
Array.prototype.indexOf=function(item, start)
{
start=start||0; if(start<0)start=Math.max(0,this.length+start);
for(var i=start;i<this.length;i++){if(this[i]===item)return i;}
return -1;
};
}
function keydown(e)
{
e = window.event||e;
var key = e.keyCode || e.which;
e = e.srcElement||e.target;
if(e.tagName=="INPUT" || e.tagName=="SELECT")
{
var a = getElements();
var n = a.indexOf(e);
if(a.length==0 || n==-1) return;
if(key==37 && n>0)
{
a[n-1].focus();
a[n-1].select();
}
else if(key==39 && n<a.length-1)
{
a[n+1].select();
}
}
}
document.onkeydown=keydown;
//-->
</SCRIPT>
<body><form name="mm">
<input type="text" value="test" >
<input type="text" value="test" >
<input type="text" value="test" >
<input type="text" disabled value="disabled" >
<input type="text" > <br>
<input type="text" value="test" >
<input type="text" value="test" >
<input type="text" value="test" >
<input type="text" disabled value="disabled" >
<input type="text" > <br>
<span style="display: none"><input/></span></form>
</body></html><SCRIPT LANGUAGE="JavaScript">
<!--
function getElements()
{
var s = document.forms["mm"].elements;
var a = [];
for(var i=0; i<s.length; i++)
{
if((s[i].tagName=="INPUT"
|| s[i].tagName=="SELECT")
&& !s[i].disabled
&& s[i].clientWidth>0)
a[a.length] = s[i];
}
return a;
}
if(typeof(Array.prototype.indexOf)!="function")
{
Array.prototype.indexOf=function(item, start)
{
start=start||0; if(start<0)start=Math.max(0,this.length+start);
for(var i=start;i<this.length;i++){if(this[i]===item)return i;}
return -1;
};
}
function keydown(e)
{
e = window.event||e;
var key = e.keyCode || e.which;
e = e.srcElement||e.target;
if(e.tagName=="INPUT" || e.tagName=="SELECT")
{
var a = getElements();
var n = a.indexOf(e);
if(a.length==0 || n==-1) return;
if(key==37 && n>0)
{
setTimeout(function(){a[n-1].select()}, 10);
}
else if(key==39 && n<a.length-1)
{
setTimeout(function(){a[n+1].select()}, 10);
}
}
}
document.onkeydown=keydown;
//-->
</SCRIPT>
<html>
<body><form name="mm">
<input type="text" value="test" >
<input type="text" value="test" >
<input type="text" value="test" >
<input type="text" disabled value="disabled" >
<input type="text" > <br>
<input type="text" value="test" readonly >
<input type="text" value="test" >
<input type="radio" />
<input type="text" value="test" >
<input type="text" disabled value="disabled" >
<input type="text" > <br>
<span style="display: none"><input/></span></form>
</body></html><SCRIPT LANGUAGE="JavaScript">
<!--
function getElements()
{
var s = document.forms["mm"].elements;
var a = [];
for(var i=0; i<s.length; i++)
{
if((s[i].tagName=="INPUT"
|| s[i].tagName=="SELECT")
&& !s[i].disabled
&& !s[i].readOnly
&& s[i].clientWidth>0)
a[a.length] = s[i];
}
return a;
}
if(typeof(Array.prototype.indexOf)!="function")
{
Array.prototype.indexOf=function(item, start)
{
start=start||0; if(start<0)start=Math.max(0,this.length+start);
for(var i=start;i<this.length;i++){if(this[i]===item)return i;}
return -1;
};
}
function keydown(e)
{
e = window.event||e;
var key = e.keyCode || e.which;
e = e.srcElement||e.target;
if(e.tagName=="INPUT" || e.tagName=="SELECT")
{
var a = getElements();
var n = a.indexOf(e);
if(a.length==0 || n==-1) return;
if(key==37 && n>0)
{
setTimeout(function(){a[n-1].focus()}, 10);
}
else if(key==39 && n<a.length-1)
{
setTimeout(function(){a[n+1].focus()}, 10);
}
}
}
document.onkeydown=keydown;
//-->
</SCRIPT>
<html>
<body>
<input type="text" >
<input type="text" >
<input type="text" >
<input type="text" >
<input type="text" >
<input type="text" disabled>
<input type="text" >
<input type="text" >
<input type="text" >
<input type="text" >
<input type="text" >
<input type="text" >
</body>
<script language="javascript">
function documentKeyDown(){
var SrcElement;
SrcElement = window.event.srcElement;
if(window.event.keyCode == 13 && SrcElement.type!="button" && SrcElement.type!="textarea" ){
}else if(window.event.keyCode==37){
//左方向键
getPreInput(event.srcElement);
}else if(window.event.keyCode==39){
//右方向键
getNextInput(event.srcElement);
}
}var inputFormA=document.getElementsByTagName('input');
var inputA=[];
for(var n=0;n<inputFormA.length;n++){
if(inputFormA[n].disabled){continue}
if(inputFormA[n].type!='text'){continue}
inputA.push(inputFormA[n]);
}
inputA[0].focus();function getNextInput(el){
var _len=inputA.length
for(var n=0;n<_len;n++){
if(el==inputA[n]){
if(n==(_len-1)){inputA[0].focus()}
else{inputA[n+1].focus();}
break;
}
}
}
function getPreInput(el){
var _len=inputA.length
for(var n=0;n<_len;n++){
if(el==inputA[n]){
if(n==0){inputA[_len-1].focus()}
else{inputA[n-1].focus();}
break;
}
}
}document.onkeydown=documentKeyDown;</script></html>