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