jQuery:如何在文本框中捕获 TAB 按键

Posted

技术标签:

【中文标题】jQuery:如何在文本框中捕获 TAB 按键【英文标题】:jQuery: How to capture the TAB keypress within a Textbox 【发布时间】:2010-11-21 19:35:03 【问题描述】:

我想捕获 TAB 按键,取消默认操作并调用我自己的 javascript 函数。

【问题讨论】:

【参考方案1】:

编辑: 由于您的元素是动态插入的,因此您必须在示例中使用 delegated on(),但您应该将其绑定到 keydown 事件,因为作为 @Marc cmets,在 IE 中keypress 事件不捕获非字符键:

$("#parentOfTextbox").on('keydown', '#textbox', function(e)  
  var keyCode = e.keyCode || e.which; 

  if (keyCode == 9)  
    e.preventDefault(); 
    // call custom function here
   
);

查看示例here。

【讨论】:

当我在 IE6+ 中按下 TAB 时,事件不会触发(但它会在任何字母数字键上触发)...我需要使用 .live('keypress', fn) 如果只适用于现场,也许你正在动态插入你的文本框元素,如果元素已经在页面上,它会工作,检查这个例子:jsbin.com/oguhe 是的,文本框是动态插入的。我的 id #textbox 示例只是为了简化问题 =) @Jon,您不使用 $(selector).live("keydown", fn) 的原因是? CMS 建议使用 keydown,因为在 IE 中,keypress 不适用于非字符键(例如 Tab) @AppleGrew:是这样说的,但事实并非如此——至少对于按键而言。对于 Tab e.which 为 0 而 e.keyCode 为 9(应该如此)。在 FF 3.5.16、jQuery 1.6.2 中测试。【参考方案2】:

jQuery 1.9 中的工作示例:

$('body').on('keydown', '#textbox', function(e) 
    if (e.which == 9) 
        e.preventDefault();
        // do your code
    
);

【讨论】:

使e.preventDefault(); 加倍以防止在文本框中插入空格。【参考方案3】:
$('#textbox').live('keypress', function(e) 
    if (e.keyCode === 9) 
        e.preventDefault();
        // do work
    
);

【讨论】:

另外,要取消默认操作,请使用 e.preventDefault();在函数的第一行。 @Jon,按键不会捕获 IE 中的非字符键 @Marc 我明白了,如何兼容IE和FF? ^^ 具有讽刺意味的是...... jQuery 应该是在浏览器之间架起一座桥梁,这样你就不必担心这样的事情了。 @Jagd,jQuery 无法推断意图。 keypress 和 keydown 是不等价的,这是有充分理由的。恰巧,这种情况不需要区分。【参考方案4】:

上面显示的方法对我不起作用,可能是我使用有点旧的 jquery,最后下面显示的代码 sn-p 适用于 - 发布以防万一有人在我的同一位置

$('#textBox').live('keydown', function(e) 
    if (e.keyCode == 9) 
        e.preventDefault();
        alert('tab');
    
);

【讨论】:

【参考方案5】:

在标签上使用向下键的一个重要部分是知道标签总是会尝试做某事,不要忘记在最后“返回 false”。

这就是我所做的。我有一个在 .blur 上运行的函数和一个交换表单焦点位置的函数。基本上,它会在表单末尾添加一个输入,然后在运行模糊计算时到那里。

$(this).children('input[type=text]').blur(timeEntered).keydown(function (e) 
        var code = e.keyCode || e.which;
        if (code == "9") 
            window.tabPressed = true;
            // Here is the external function you want to call, let your external
            // function handle all your custom code, then return false to
            // prevent the tab button from doing whatever it would naturally do.
            focusShift($(this));
            return false;
         else 
            window.tabPressed = false;
        
        // This is the code i want to execute, it might be different than yours
        function focusShift(trigger) 
            var focalPoint = false;
            if (tabPressed == true) 
                console.log($(trigger).parents("td").next("td"));
                focalPoint = $(trigger).parents("td").next("td");

            
            if (focalPoint) 
                $(focalPoint).trigger("click");
            
        
    );

【讨论】:

【参考方案6】:

试试这个:

$('#contra').focusout(function ()
    $('#btnPassword').focus();
);

【讨论】:

【参考方案7】:

假设您有 Id 为 txtName 的 TextBox

$("[id*=txtName]").on('keydown', function(e)  
  var keyCode = e.keyCode || e.which; 
  if (keyCode == 9) 
     e.preventDefault();
     alert('Tab Pressed');
 
); 

【讨论】:

【参考方案8】:

您可以使用this JQuery API 捕获事件选项卡。

$( "#yourInputTextId" ).keydown(function(evt) 
   if(evt.key === "Tab")
      //call your function
);

【讨论】:

添加 evt.preventDefault(); 后对我有用在如果【参考方案9】:

这对我有用:

$("[id*=txtName]").on('keydown', function(e) var keyCode = e.keyCode || e.which; if (keyCode == 9) e.preventDefault(); alert('Tab Pressed'); );

【讨论】:

以上是关于jQuery:如何在文本框中捕获 TAB 按键的主要内容,如果未能解决你的问题,请参考以下文章

在文本框中捕获TAB键[关闭]

访问表单:在文本框中捕获日期更改

从表单中的文本框中捕获文本时,如何修复运行时错误?

在 JQuery 对话框文本框中输入单击不会触发 __doPostBack

wpf 焦点定位到 文本框开头? 2:如何按Tab,让焦点不进入第3个文本框,意思是在前两个文本框中切换

当用户在文本框中按下返回时,我可以取消回发吗?