如何实现按向上箭头时,得到按shift+tab的效果(向上的focus)?看似简单的问题,就是无法实现,苦恼ing...

guliang 2003-08-27 05:44:16
我用keyCode转换的方法实现了按tab的效果(向下focus),但就是无法实现向下focus的效果,请达人指教!

下面是我的响应onkeydown的函数,简单的用shiftKey指定是不行的,因为是只读的,所以我只好用了新建一个event的方法,但是仍然不起作用:
function onKey()
{
var src_obj = window.event.srcElement;
if (window.event.keyCode == 38)//up key
{
var eventObj = document.createEventObject();
eventObj.shiftKey = true;
eventObj.shiftLeft = true;
eventObj.keyCode = 9;
eventObj.returnValue = true;
src_obj.fireEvent("onkeydown",eventObj);
event.cancelBubble = true;
}
else if (window.event.keyCode == 40)//down key
{
window.event.keyCode = 9;
}
}

如果有谁知道解决方法的话,最好用mail通知我一下,谢谢!
guliang26@hotmail.com
...全文
436 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
guliang 2004-01-23
  • 打赏
  • 举报
回复
既然没人知道,就只好结贴了。
sunicom 2003-09-02
  • 打赏
  • 举报
回复
学习
hcsunjun 2003-09-01
  • 打赏
  • 举报
回复
wsh不能在网页中运行,只能在本地运行
guliang 2003-09-01
  • 打赏
  • 举报
回复
这个例子太复杂了,而且还是用的遍历节点的方式,如果是这样的话,我就不问了。
awaysrain 2003-09-01
  • 打赏
  • 举报
回复
csdn的树,自己研究吧

http://hongjun.freewebpage.org/xml.zip
AngelGavin 2003-09-01
  • 打赏
  • 举报
回复
SC
JavaBoyCaoJi 2003-09-01
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2206/2206556.xml?temp=.9118158
一个比较有难度的javascript问题
guliang 2003-09-01
  • 打赏
  • 举报
回复
WScript在本地运行的时候出现警告框,说不安全,问要不要继续。
在网上运行的话,直接出现错误,说无法生成对象。
所以在网上是不可能用Wscript的。只好怪他是activex,而且功能大到无法保证安全的程度了。
不过还是感谢楼上,希望能有别的方法。
awaysrain 2003-09-01
  • 打赏
  • 举报
回复

<form name="form1" method="post" action="">
<table width="100%" border="1" cellspacing="0" cellpadding="5">
<tr>
<td><input type="text" name="textfield"></td>
<td><input type="text" name="textfield2"></td>
<td><input type="text" name="textfield3"></td>
</tr>
<tr>
<td><input type="text" name="textfield4"></td>
<td><input type="text" name="textfield5"></td>
<td><input type="text" name="textfield6"></td>
</tr>
<tr>
<td><input type="text" name="textfield7"></td>
<td><input type="text" name="textfield8"></td>
<td><input type="text" name="textfield9"></td>
</tr>
</table>
</form>
<script language="JScript">
var WshShell = new ActiveXObject("WScript.Shell");
function document.onkeydown()
{
switch (window.event.keyCode)
{
case 37 : // left key
WshShell.SendKeys ("+{TAB}");
window.event.returnValue=false
break;
case 38 : // up key
WshShell.SendKeys ("+{TAB}");
window.event.returnValue=false
break;
case 39 : // right key
WshShell.SendKeys ("{TAB}");
window.event.returnValue=false
break;
case 40 : // down key
WshShell.SendKeys ("{TAB}");
window.event.returnValue=false
break;
}
}
</script>
guliang 2003-08-29
  • 打赏
  • 举报
回复
看来问了一个无解的问题。
lzwwin 2003-08-28
  • 打赏
  • 举报
回复
看来我不能帮你了。
guliang 2003-08-28
  • 打赏
  • 举报
回复
我要实现这个功能的原意是想在自己做的树形菜单上,可以用方向将来控制焦点的移动,分支的现实隐藏,类似windows explorer的目录窗口的方向控制操作。
显然,上面的方法过于繁琐,而且很可能把focus设到还没有显示出来的分支上。我想这是自己设焦点所必须面对的问题,不过估计将会是一个十分复杂的工程(代替windows管理tab移动的控制)。

所以如果可以用转换keyCode的方法来实现这个功能,将是最好的解决途径,现在的问题就是如果做?
lzwwin 2003-08-28
  • 打赏
  • 举报
回复
这段代码保存成:focusTest.htm
执行的时候你先让文本框得到焦点,使用上下方向键控制切换焦点

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language='javascript' src="MaskInput.js"></script>
<style>
a:link
{
color: #000000;
text-decoration: none;
}
a:hover
{
color: #000000;
text-decoration: none;
}
A
{
color: #000000
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #000000;

}
a:active {
color: #FF0000;
}
</style>
</head>

<body onkeyDown="ChangeFocus()">
<input tabindex="1">
<input tabindex="2">
<input tabindex="3">
<input tabindex="4">
<input tabindex="5">
<input tabindex="6">
<input tabindex="7">
<input tabindex="8">
<input tabindex="9">
<input tabindex="10">
<br>
<a href="http://www.sina.com.cn" tabindex="11" target='_blank'>test_link1</a>
<br>
<a href="http://www.sohu.com" tabindex="12" target='_blank'>test_link2</a>
<br>
<a href="http://www.csdn.net" tabindex="13" target='_blank'>test_link3</a>
<br>
<a href="file:///c|/" tabindex="14" target='_blank'>test_link4</a>
<br>
<a href="file:///d|/" tabindex="15" target='_blank'>test_link5</a>
<br>
</body>
</html>

这段代码保存成:MaskInput.js
var onchangeObj = null; //判断对象是否发生了变化
function ChangeFocus()
{//用法只要先包含这个JS然后再<body onkeydown="ChangeFocus()"></body>
// 如果处于选择文字状态
var objSelText = document.selection.createRange() ;
var nSelTextLength = objSelText.text.length ;
if (event.keyCode == 229 && nSelTextLength >= 2 && event.keyCode != 13 && event.keyCode != 27)
//中文输入状态下(注229是全角通用键值)
return true ;
if (event.keyCode != 229 && nSelTextLength > 0 && event.keyCode != 13 && event.keyCode != 27)
return true ;

var type = event.srcElement.type ;
if(event.keyCode == 13 && typeof(event.srcElement.href) != "undefined") return true; //如果是链接就不转换焦点
if (( type == "button" || type == "image" || type == "submit" || type == "reset" || type == "password" ) && event.keyCode== 13)
return true ;
// 将回车键转为 Tab 键
//alert(event.keyCode);
if (event.keyCode == 13)
event.keyCode = 9 ;

//将右方向键没为TAB键
if(event.keyCode == 40)
event.keyCode = 9 ;

//将左方向键变为shift+tab的功能
//在这里是通过设每一个可能到焦点对象的tabindex来确定的
if(event.keyCode == 38 )
{
var nTab = event.srcElement.tabIndex ;
var n = 100 ;
var obj = event.srcElement ;
for (var i=0; i<document.all.length; i++)
{ z
if ((nTab - document.all(i).tabIndex) > 0 && (nTab - document.all(i).tabIndex) < n )
{
if (document.all(i).tagName != "undefined" && document.all(i).tabIndex > 0 && !(document.all(i).disabled))
{
obj = document.all(i) ;
n = nTab - obj.tabIndex ;
}
}
}
obj.focus() ;
return ;
}
}
guliang 2003-08-28
  • 打赏
  • 举报
回复
高手高手在哪里?
guliang 2003-08-28
  • 打赏
  • 举报
回复
希望大家在回答的时候可以给个简单的可以运行的例子。谢谢!
看来这个问题还不简单。
anita2li 2003-08-28
  • 打赏
  • 举报
回复
UP
guliang 2003-08-28
  • 打赏
  • 举报
回复
楼上的打不开。
lzwwin 2003-08-28
  • 打赏
  • 举报
回复
你问一下csdn中树型菜单是如何实现上下方向键控制的好了。
guliang 2003-08-27
  • 打赏
  • 举报
回复
错误信息:
WshShell对象未定义!

谁给个可以在网页里运行的例子阿?

难道真的就不可以用javascript实现这个功能?
awaysrain 2003-08-27
  • 打赏
  • 举报
回复
还有这个

http://expert.csdn.net/Expert/topic/2130/2130012.xml?temp=.4492609
加载更多回复(1)

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧