当前位置: 首页 > 知识库问答 >
问题:

JavaScript或jquery触发左箭头键按下事件(模拟箭头键按下)

濮阳旺
2023-03-14

我试图模拟在rad grid控件(Telerik)的文本区域中按下左右箭头键。

我有一个特定于浏览器Firefox的错误,其中选项卡事件(修复了此部分)和箭头键将不起作用。所有其他浏览器工作正常。

因此,作为一种解决方法,我想使用JavaScript或jquery模拟箭头键。

下面是我使用包含的选项卡事件修复程序所做的工作。除此之外,我还检查按键代码37(这是左箭头键)是否被按下。此时,我想模拟文本区域中的左箭头键。

$(document).on('keydown', function (event) {
    if (event.keyCode == 9) {   //tab pressed
        event.preventDefault(); // stops default action
    }
});

$('body').keyup(function (e) {

   var code = e.keyCode || e.which;

   //Left arrow key press
   if (code == '37') 
   {
       moveLeft();// This does not trigger the left arrow event
   }

   //Tab button pressed
   if (code == '9') {
       //shift was down when tab was pressed focus -1
       if (e.shiftKey && code == 9) {                                    
           var focused = $(':focus');
           var inputs = $(focused).closest('form').find(':input');
           inputs.eq(inputs.index(focused) - 1).focus();
       }
       //tab was pressed focus +1
       else {
            var focused = $(':focus');
            var inputs = $(focused).closest('form').find(':input');
            inputs.eq(inputs.index(focused) + 1).focus();                                 
            }
   }      
});

在这个问题上的任何帮助将不胜感激

共有1个答案

浦泳
2023-03-14

我通过将光标移回一个空格来使其正常工作,下面是我用来模拟向左箭头键按下的代码

注意——要模拟right,键码是39,并将myval属性设置为-1。

$('body').keydown(function (e) {

     var code = e.keyCode || e.which; //Find the key pressed

     if (code == '37') {

          e.preventDefault(); // stop default action
          var elementId = e.target.id;// get id of input text area                                     

          var el = document.getElementById(elementId),
          myval = 1 // set mouse cursor to move back one space
          cur_pos = 0;

          if (el.selectionStart) {
              cur_pos = el.selectionStart;
          } 
          else if (document.selection) {
              el.focus();

              var r = document.selection.createRange();
              if (r != null) {
                  var re = el.createTextRange(),
                  rc = re.duplicate();
                  re.moveToBookmark(r.getBookmark());
                  rc.setEndPoint('EndToStart', re);

                  cur_pos = rc.text.length;
               }
          }

          if (el.setSelectionRange) {
              el.focus();
              el.setSelectionRange(cur_pos - myval, cur_pos - myval);
          }
          else if (el.createTextRange) {
              var range = el.createTextRange();
              range.collapse(true);
              range.moveEnd('character', cur_pos - myval);
              range.moveStart('character', cur_pos - myval);
              range.select();
          }
}
 类似资料:
  • 问题内容: 如何检测何时按下箭头键之一?我用它来找出: 尽管它适用于所有其他键,但不适用于箭头键(可能是因为默认情况下浏览器应该在这些键上滚动)。 问题答案: 箭头键仅由触发,而不由触发。 关键代码为: left = 37 up = 38 right = 39 down = 40

  • 对于使用箭头键,首先必须存储它以分析它。这就是为什么我使用来存储它。但是当我尝试运行这段代码时,当我按下向上键时,它显示,当我按下回车键时,这个删除并退出程序,而不打印和

  • 我发现了很多相关的问题(这里和其他地方),但没有具体找到这个问题。 我正在尝试侦听箭头键(37-40)的键关闭事件,但是当以特定顺序使用箭头键时,后续箭头不会生成“keydown”事件。 示例:http://blog.pothoven.net/2008/05/keydown-vs-keypress-in-javascript.html 在该页面上,单击“在此处键入 - 但是,如果我做同样的事情,但

  • 我正在做一个游戏,它需要键盘输入,很多时候你需要几个键同时按下。例如,你想按住空格来射击,向上箭头来推进,向左或向右箭头来转动。然而,箭头键的作用非常奇怪。大多数情况下,keypressed方法无法识别按下的第三个箭头键,有时甚至更奇怪:如果按下的是其他键,它会检测出错误的键。我明白这很令人困惑,所以我做了一个程序来展示它: 这里有几件事要用这个程序来说明我的意思:-保持空格,向上箭头,然后试着按

  • 请先按(按住)箭头键,然后按非箭头键,测试以下代码。至少在Mac中,你会看到箭头键不断地应用它们的功能,而其他键则没有。有没有人知道如何使其他键在处理过程中连续应用(即不通过改变OSX的功能)?

  • 问题内容: 如何在Javascript和/或jQuery中将功能绑定到左右箭头键?我看了一下jQuery的js-hotkey插件(包装了内置的bind函数以添加一个参数来识别特定的键),但是它似乎不支持箭头键。 问题答案: $(document).keydown(function(e) { switch(e.which) { case 37: // left break; 将箭头键的自定义代码放在