Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检测用户何时按第一个或最后一个表单元素上的tab键(在div中)_Javascript_Jquery_Html_Forms - Fatal编程技术网

Javascript 检测用户何时按第一个或最后一个表单元素上的tab键(在div中)

Javascript 检测用户何时按第一个或最后一个表单元素上的tab键(在div中),javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,我有一个跨几个div的HTML表单。我需要知道用户在每个div中的第一个或最后一个元素上按下tab键的时间(这样我就可以应用一些自定义的tab功能)。对于div中的第一个元素,我要查找Tab+Shift;对于最后一个元素,我只查找Tab。元素可以是文本框、文本区域、单选按钮、选择列表或复选框 检测第一个和最后一个元素最有效的方法是什么?很高兴使用jQuery解决方案 谢谢。您可以使用第一个和最后一个子选择器: var first = $("#form-name:first-child"); va

我有一个跨几个div的HTML表单。我需要知道用户在每个div中的第一个或最后一个元素上按下tab键的时间(这样我就可以应用一些自定义的tab功能)。对于div中的第一个元素,我要查找Tab+Shift;对于最后一个元素,我只查找Tab。元素可以是文本框、文本区域、单选按钮、选择列表或复选框

检测第一个和最后一个元素最有效的方法是什么?很高兴使用jQuery解决方案


谢谢。

您可以使用第一个和最后一个子选择器:

var first = $("#form-name:first-child");
var last = $("#form-name:last-child");

您可以使用
:first child
:last child
选择器查找表单元素。然后,您可以附加一个
keydown
事件处理程序,并分别检查SHIFT+TAB和TAB

$('div input:first-child').keydown(function(event) {
    if (event.which == 9 && event.shiftKey) { // Tab is keycode 9
        // Do custom tab handling
    }
});

$('div input:last-child').keydown(function(event) {
    if (event.which == 9) {
        // Do custom tab handling
    }
});

只要输入确实是div的第一个子项和最后一个子项,下面的操作就会起作用。否则,您将需要在选择时变得更加棘手

编辑:我关于子订单的断言似乎不正确。这应该适用于大多数情况结束编辑

如果您希望它特定于某些类型的输入,或任何被视为输入但实际上不是
输入
元素的内容,则需要对选择器进行一些微调

演示

代码

$( '#myform' )
    .find( 'div input:first-child, div input:last-child' )
    .bind( 'keydown', function( e )
    {
        if( e.which === 9 )
        {
            //custom code here
            e.preventDefault();
        }
    } );

听起来您希望在第一个和最后一个元素上换行

  • 获取第一个:
    $('#form')。查找('input,textarea,select')。第一个()
  • 获取最后一个:
    $('#form')。查找('input,textarea,select')。首先()
  • 将keydown绑定到元素:
    .keydown()
    • 使用此选项确定按下了哪个键:
    • 然后关注所需的元素:
      .focus()
编辑:选择器逻辑错误


e、 g.:

如果您所要做的只是将焦点向后/向前移动到正确的输入,为什么不使用
tabindex
属性而不是JS?这些都不起作用。它们将查找所有div中的所有输入,并仅返回总集合的第一个或最后一个。不是每个div的第一个和最后一个。那么您想对第一个和最后一个输入使用相同的事件处理程序吗?似乎您只希望在第一个输入上处理SHIFT+TAB,并让默认行为仅在TAB键上接管。