Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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
Events 如何模拟带角度的tab按键_Events_Angularjs - Fatal编程技术网

Events 如何模拟带角度的tab按键

Events 如何模拟带角度的tab按键,events,angularjs,Events,Angularjs,我感兴趣的是做一个非常简单的自动标签功能。我希望以编程方式为访问者按“tab”。我似乎不知道如何在标准JS中实现这一点(即,不使用jQuery的.trigger()) 用法: 根据您需要的浏览器支持程度,可能会为您提供帮助。我认为这是不可能的。退房并: 请注意,手动触发事件不会生成默认值 与该事件关联的操作。例如,手动启动 焦点事件不会导致元素接收焦点(必须使用 它的焦点方法),手动触发submit事件不会 提交表单(使用提交方法),手动触发关键事件 不会导致该字母出现在聚焦文本输入中,并且 手

我感兴趣的是做一个非常简单的自动标签功能。我希望以编程方式为访问者按“tab”。我似乎不知道如何在标准JS中实现这一点(即,不使用jQuery的
.trigger()

用法:


根据您需要的浏览器支持程度,可能会为您提供帮助。

我认为这是不可能的。退房并:

请注意,手动触发事件不会生成默认值 与该事件关联的操作。例如,手动启动 焦点事件不会导致元素接收焦点(必须使用 它的焦点方法),手动触发submit事件不会 提交表单(使用提交方法),手动触发关键事件 不会导致该字母出现在聚焦文本输入中,并且 手动触发链接上的单击事件不会导致链接被删除 激活等。在UI事件的情况下,这对于 安全原因,因为它阻止脚本模拟用户操作 与浏览器本身交互的

您可以尝试另一种方法:更改指令,使其接收下一步应该关注的元素的id:

app.directive('autoTabTo', [function () {
  return {
    restrict: "A",
    link: function (scope, el, attrs) {
      el.bind('keyup', function(e) {
        if (this.value.length === this.maxLength) {
          var element = document.getElementById(attrs.autoTabTo);
          if (element)
            element.focus();
        }
      });
    }
  }
}]);
然后你可以这样使用它:

<input type="text" id="input1" auto-tab-to="input2" maxlength="5"/>
<input type="text" id="input2" auto-tab-to="input1" maxlength="3"/>

工作演示


这并不完全是您想要的,但我恐怕不可能通过模拟制表键来实现。

我认为这一个更好,不需要提及输入元素的id

app.directive('autoTabTo', [function () {
  return {
    restrict: "A",
    link: function (scope, el, attrs) {
    el.bind('keyup', function(e) {
       if (this.value.length === this.maxLength) {
                 var inputs = $(this).closest('form').find(':input');
                 inputs.eq( inputs.index(this)+ 1 ).focus();
        }
      });
    }
   }
}]);

您不应该使用元素[0].focus()删除jQuery依赖项吗?@BrianF如果您是对的。当我贴出答案时,我完全错过了。我会修好的。谢谢@BrianF我刚刚检查了它,代码是正确的:
元素
不是jQuery对象,所以直接调用
.focus()
是可以的。这是我的想法,但它似乎对我不起作用,我得到了以下错误:TypeError:object[object object]没有方法“focus”。您是否在没有jQuery的情况下进行了测试?你知道我这方面有什么问题吗?@BrianF你使用jQuery是为了从DOM中获取元素吗?上面的代码使用的是
document.getElementById
,而不是
$()
。如果您是,那么您应该执行
元素[0].focus()
,正如您前面提到的。代码非常巧妙,但仍然具有jQuery依赖性。内部部分可以重写为:
var inputs=elem.nestest('form').find('code>var inputs');inputs.eq(inputs.index(elem)+1.focus()
app.directive('autoTabTo', [function () {
  return {
    restrict: "A",
    link: function (scope, el, attrs) {
    el.bind('keyup', function(e) {
       if (this.value.length === this.maxLength) {
                 var inputs = $(this).closest('form').find(':input');
                 inputs.eq( inputs.index(this)+ 1 ).focus();
        }
      });
    }
   }
}]);