当前位置:首页 » 多媒体相关

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


我用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

推荐阅读

  • 联想G901电子书上传的问题和技巧 [详细内容]
  • 标头无弱旅佳能50mm镜头历史档案簿产品评测 [详细内容]
  • 不到两千抱回家 佳能MV920仅1950元佳能 Canon MV9202000-3000元 [详细内容]
  • 暗夜玩家需要掌握的技巧 [详细内容]
  • 575常用问题解答(安装篇) [详细内容]
  • 07春季4款新DC 面部识别卡片横评!富士 FUJIFILM FinePix F40fd2000-3000元 [详细内容]
  • 《魔法奇兵》人物和宠物加点技巧 [详细内容]
  • 网友回答:
    网友:awaysrain

    sendkeys,这个或许对你有帮助  
       
       
        windows   脚本宿主        
       
      sendkeys   方法  
      请参阅  
      wshshell   对象   |   run   方法  
      将一个或多个键击发送到活动窗口。  
       
      object.sendkeys(string)  
      参数  
      object    
      wshshell   对象。    
      string    
      表示要发送的键击的字符串值。    
      说明  
      使用   sendkeys   方法可以将键击发送到无自动化界面的应用程序中。多数键盘字符都可用一个键击表示。某些键盘字符由多个键击组合而成。要发送单个键盘字符,请将字符本身作为   string   参数发送。例如,要发送字母   x,则请发送   string   参数   "x"。  
       
      注意       要发送空格,则请发送字符串   "   "。  
      可使用   sendkeys   同时发送多个键击。为此,可将每个键击按顺序排列在一起,以此来创建表示一系列键击的复合字符串参数。例如,要发送键击   a、b   和   c,则需要发送字符串参数   "abc"。sendkeys   方法将某些字符用作字符的修饰符。这组特殊的字符可包括圆括号、中括号、大括号,以及:    
       
      加号               "+"、    
      插入记号                           "^"、    
      百分号   "%"、    
      和“非”符号               "~"。    
      用大括号   "{}"   括起这些字符可以发送它们。例如,要发送加号,请使用字符串参数   "{+}"。sendkeys中使用的中括号   "[   ]"   无任何特殊含义,但是必须把它们括在大括号中,以便容纳确实要赋予其特殊含义的应用程序。    
       
      要发送左中括号字符,请发送字符串参数   "{[]";要发送右中括号字符,请发送字符串参数   "{]}"。    
      要发送左大括号字符,请发送字符串参数   "{{}";要发送右大括号字符,请发送字符串参数   "{}}"。    
      某些键击不生成字符。某些键击表示操作。要发送这些类型的键击,请发送下表中列出的参数:  
       
      键   参数    
      退格键   {backspace}、{bs}   或   {bksp}    
      break   {break}    
      caps   lock   {capslock}    
      del   或   delete   {delete}   或   {del}    
      向下键   {down}    
      end   {end}    
      enter   {enter}   或   ~    
      esc   {esc}    
      help   {help}    
      home   {home}    
      ins   或   insert   {insert}   或   {ins}    
      向左键   {left}    
      num   lock   {numlock}    
      page   down   {pgdn}    
      page   up   {pgup}    
      print   screen   {prtsc}    
      向右键   {right}    
      scroll   lock   {scrolllock}    
      tab   {tab}    
      向上键   {up}    
      f1   {f1}    
      f2   {f2}    
      f3   {f3}    
      f4   {f4}    
      f5   {f5}    
      f6   {f6}    
      f7   {f7}    
      f8   {f8}    
      f9   {f9}    
      f10   {f10}    
      f11   {f11}    
      f12   {f12}    
      f13   {f13}    
      f14   {f14}    
      f15   {f15}    
      f16   {f16}    
       
      要发送由常规键击和   shift、ctrl   或   alt   组合而成的键盘字符,请创建表示该键击组合的复合字符串参数。可通过在常规键击之前添加一个或多个以下特殊字符来完成上述操作:  
       
      键   特殊字符    
      shift   +    
      ctrl   ^    
      alt   %    
       
      注意       这样使用时,不用大括号括起这些特殊字符。  
      要指定在按下多个其他键时,按下   shift、ctrl   和   alt   的组合,请创建复合字符串参数,用括号括起其中的组合键。例如,要发送的组合键指定:    
       
      如果在按   e   和   c   的同时按   shift   键,则发送字符串参数   "+(ec)"。    
      如果在按   e   时只按   c,则发送字符串参数   "+ec"。    
      可使用   sendkeys   方法发送一种在一行内重复按键的键击。为此,要创建复合字符串参数,以指定要重复的键击,并在其后指定重复次数。可使用   {键击   数字}   形式的复合字符串参数来完成上述操作。例如,如果要发送   10   次   "x",则需要发送字符串参数   "{x   10}"。请确保在键击和数字之间有一个空格。  
       
      注意       只可以发送重复按一个键的键击。例如,可以发送   10   次   "x",但不可发送   10   次   "ctrl+x"。  
      注意       不能向应用程序发送   print   screen   键   {prtsc}。  
      示例  
      下面的示例演示如何将一个   .wsf   文件用于以不同脚本语言写成的两个作业。每个作业都运行   windows   计算器并将它发送给键击以执行简单的计算。  
       
      <package>  
            <job   id="vbs">  
                  <script   language="vbscript">  
                        set   wshshell   =   wscript.createobject("wscript.shell")  
                        wshshell.run   "calc"  
                        wscript.sleep   100  
                        wshshell.appactivate   "calculator"  
                        wscript.sleep   100  
                        wshshell.sendkeys   "1{+}"  
                        wscript.sleep   500  
                        wshshell.sendkeys   "2"  
                        wscript.sleep   500  
                        wshshell.sendkeys   "~"  
                        wscript.sleep   500  
                        wshshell.sendkeys   "*3"  
                        wscript.sleep   500  
                        wshshell.sendkeys   "~"  
                        wscript.sleep   2500  
                  </script>  
            </job>  
       
            <job   id="js">  
                  <script   language="jscript">  
                        var   wshshell   =   wscript.createobject("wscript.shell");  
                        wshshell.run("calc");  
                        wscript.sleep(100);  
                        wshshell.appactivate("calculator");  
                        wscript.sleep(100);  
                        wshshell.sendkeys   ("1{+}");  
                        wscript.sleep(500);  
                        wshshell.sendkeys("2");  
                        wscript.sleep(500);  
                        wshshell.sendkeys("~");  
                        wscript.sleep(500);  
                        wshshell.sendkeys("*3");  
                        wscript.sleep(500);  
                        wshshell.sendkeys("~");  
                        wscript.sleep(2500);  
                  </script>  
            </job>  
      </package>  
      请参阅  
      wshshell   对象   |   run   方法  
       
       
       
      --------------------------------------------------------------------------------  
       
      &copy;   2001   microsoft   corporation.   保留所有权利。  
       
     

    网友:anita2li

    up

    网友:lzwwin

    这段代码保存成: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   ;  
      }  
      }  
     

    网友:lzwwin

    你问一下csdn中树型菜单是如何实现上下方向键控制的好了。

    网友:awaysrain

    csdn的树,自己研究吧  
       
      http://hongjun.freewebpage.org/xml.zip

    网友:hcsunjun

    wsh不能在网页中运行,只能在本地运行

    网友:javaboycaoji

    http://expert.csdn.net/expert/topic/2206/2206556.xml?temp=.9118158  
      一个比较有难度的javascript问题

    网友:angelgavin

    sc

    网友:sunicom

    学习

    .

    讨论区

    Login