2011-12-17 205 views
5

我想更改keydown中的键码(按键)在页面的所有输入中。我想用TAB键码替换回车键码。我如何做到这一点?如何在javascript或jQuery的ENTER按键模拟TAB

感谢


EDIT 1)

考虑以下代码:

<div> 
    <asp:RadioButtonList ID="RadioButtonList1" runat="server"> 
     <asp:ListItem>1</asp:ListItem> 
     <asp:ListItem>2</asp:ListItem> 
     <asp:ListItem>3</asp:ListItem> 
     <asp:ListItem>4</asp:ListItem> 
    </asp:RadioButtonList> 
    <br /> 
    <br /> 
    <asp:TextBox ID="TextBox1" runat="server">3333</asp:TextBox> 
    <br /> 
    <br /> 
    <asp:DropDownList ID="DropDownList1" runat="server"> 
     <asp:ListItem>1</asp:ListItem> 
     <asp:ListItem>2</asp:ListItem> 
     <asp:ListItem>3</asp:ListItem> 
    </asp:DropDownList> 
</div> 

我想,当用户按下Enter键上的上述控制重点ENY进入下一控制。

感谢

+2

您可以在http://stackoverflow.com/questions/1009808/enter-key-press-behaves-like-a-tab-in-找到类似的问题javascript – Pavan 2011-12-17 16:47:33

+0

它不适用于我 – Arian 2011-12-17 16:51:04

+0

我相信值得注意的是,改变浏览器的默认行为通常不是一个好主意。它违背了用户在按下按键时期望发生的事情。 – 2011-12-17 16:55:26

回答

-1

我觉得这个工作:

$('input').live("keypress", function (e) { 
     /* ENTER PRESSED*/ 
     var OffSet = 0; 
     if (e.keyCode == 13) { 
      /* FOCUS ELEMENT */ 
      if ($(this).is("input[type='radio']")) { 
       var tblID = $(this).closest('table').attr('id'); 
       var radios = $('#' + tblID).find(":input"); 
       //alert(radios.index(this)); 
       OffSet = radios.length - radios.index(this) - 1; 
      } 
      //alert(OffSet); 

      var inputs = $(this).parents("form").eq(0).find(":input"); 
      var idx = inputs.index(this); 
      inputs[idx + OffSet].blur(); 

      try { 
       inputs[idx + OffSet].selectionStart = inputs[idx + OffSet].selectionEnd = -1; 
      } catch (e) { 

      } 
      if (idx == inputs.length - 1) { 
       inputs[0].select(); 
      } else { 
       inputs[idx + 1 + OffSet].focus(); // handles submit buttons 
       try { 
        inputs[idx + 1 + OffSet].select(); 
       } catch (e) { 
       } 
      } 
      return false; 
     } 
    }); 
2

希望这个作品

$('input,textarea').keydown(function(){ 
    if(event.keyCode==13) { 
    event.keyCode = 9; 
    } 
}); 

编辑

试试这个http://jsfiddle.net/GUmUg/。玩弄选择,使这项工作,因为我不知道ASP

$('input,textarea').keypress(function(e){ 
    if(e.keyCode==13) { 
    $(this).next().focus(); 
    } 
}); 
+0

它不适合我,你测试它吗? – Arian 2011-12-17 17:05:40

+0

不,我没有测试它 – aWebDeveloper 2011-12-17 17:06:59

+0

请参阅我的编辑1 – Arian 2011-12-17 17:14:58

3

此代码来替换制表符输入:

$("#wmd-input").bind("keypress", function(e) { 
    if (e.keyCode == 13) { 
     var input = $(this); 
     var inputVal = input.val(); 
     setTimeout(function() { 
     input.val(inputVal.substring(0,inputVal.length) + "\t"); 
     }, 1); 
    } 
}); 

Live Demo

UPDATE:

此代码重点关注下一个元素:

$(document).ready(function() { 
    $("input,select").bind("keydown", function (e) { 
     if (e.keyCode == 13) { 
      var allInputs = $("input,select"); 
      for (var i = 0; i < allInputs.length; i++) { 
       if (allInputs[i] == this) { 
        while ((allInputs[i]).name == (allInputs[i + 1]).name) { 
         i++; 
        } 

        if ((i + 1) < allInputs.length) $(allInputs[i + 1]).focus(); 
       } 
      } 
     } 
    }); 
}); 
+0

抱歉不适合我。我在铬 – aWebDeveloper 2011-12-17 17:08:04

+0

我想,我误解了这个问题。你的意思是关注TAB新闻上的其他元素? – 2011-12-17 17:08:25

+0

它不工作。请参阅我的编辑1.我想集中到下一个控制 – Arian 2011-12-17 17:14:46

1
$('input').on('keydown',function(e){ 
    var keyCode = e.keyCode || e.which; 
    if(e.keyCode === 13) { 
     e.preventDefault(); 
     $('input')[$('input').index(this)+1].focus(); 
     } 
}); 

检查小提琴这里:http://jsfiddle.net/Pd5QC/

+0

它不工作。请参阅我的编辑1 – Arian 2011-12-17 17:14:20

+1

有你...我有更新代码..检查小提琴以及.. – 2011-12-17 17:53:25

6

我也曾有过类似的问题,在这里我想按+的数字键盘,以标签到下一个领域。现在我已经发布了一个我认为会帮助你的图书馆。

PlusAsTab:一个jQuery插件,将numpad plus键用作tab键等价物。

既然你想进入/相反,你可以设置的选项。找出您想要与jQuery event.which demo一起使用的密钥。

JoelPurra.PlusAsTab.setOptions({ 
    // Use enter instead of plus 
    // Number 13 found through demo at 
    // https://api.jquery.com/event.which/ 
    key: 13 
}); 

然后通过添加plus-as-tab="true"您要使用输入,如标签中,或者包含这些表单域的一些其他元素的表单字段启用该功能。单选按钮不应该是个问题,因为它们被我的其他库EmulateTab覆盖 - 请参阅autonavigation of radio buttons in that demo

<div plus-as-tab="true"> 
    <!-- all focusable elements inside the <div> will be enabled --> 
    <asp:RadioButtonList ID="RadioButtonList1" runat="server"> 
    <!-- Radio buttons should not be a problem. --> 
    </asp:RadioButtonList> 
</div> 

您可以在PlusAsTab enter as tab demo中自己尝试一下。

+0

我喜欢你的插头乔尔,但它似乎没有任何关注tabindex当使用输入作为标签样本。 ( – 2013-03-26 19:46:03

+1

@EdDeGagne:'tabindex'被设计忽略 - 参见[SkipOnTab与tabindex](https://github.com/joelpurra/skipontab/wiki/SkipOnTab-versus-tabindex)。应该写一些与PlusAsTab和EmulateTab的页面类似或链接。 – 2013-03-27 15:59:22

+1

好工作的插件!很好的文档。 – gicalle 2015-02-05 08:16:47

1

我这样做的方式是通过对每个选择使用jquery并关注当前对象之后的元素。

$(document).on('keyup', '.my-input', function (ev) { 

    if (ev.keyCode == '13') { 
     var currentInput = this; 
     var isOnCurrent = false; 

     $('.my-input').each(function() { 

      if (isOnCurrent == true) { 
       $(this).focus(); 
       return false; 
      } 

      if (this == currentInput) { 
       isOnCurrent = true; 
      } 

     }); 
    } 
}); 
+0

对不起,它不工作 – Arian 2012-11-16 19:35:54

0

我创建了一个simple jQuery plugin这确实解决了这个问题。它使用jQuery UI的':tabbable'选择器来查找下一个'tabbable'元素并选择它。

用法示例:

// Simulate tab key when enter is pressed   
$('.myElement').bind('keypress', function(event){ 
    if(event.which === 13){ 
     if(event.shiftKey){ 
      $.tabPrev(); 
     } 
     else{ 
      $.tabNext(); 
     } 
     return false; 
    } 
}); 
-1
$(document).ready(function() { 

//Objetos con CssClass="EntTab" sustituye el Enter (keycode 13) por un Tabulador (keycode 9)!! 

    $(".EntTab").bind("keypress", function(e) { 
     if (e.keyCode == 13) { 
      var inps = $("input, select"); //add select too 
      for (var x = 0; x < inps.length; x++) { 
       if (inps[x] == this) { 
        while ((inps[x]).name == (inps[x + 1]).name) { 
         x++; 
        } 
        if ((x + 1) < inps.length) $(inps[x + 1]).focus(); 
       } 
      } e.preventDefault(); 
     } 
    }); 
}); 
相关问题