关注AngularJs中html表单内的第一个空输入
Focus first empty input inside html form in AngularJs
我正试图使用angularjs指令将第一个空输入集中在html表单中。以下是我迄今为止编写的指令代码(并应用于表单元素):
.directive('focusFirstEmptyInput', ['$timeout', function ($timeout) {
return {
restrict: "A",
link: function (scope, element, attrs) {
var focustElement = function () {
var keepGoing = true;
angular.forEach(element[0], function (field) {
if (!keepGoing) {
return;
}
if (field.tagName.toLowerCase() !== 'input')
return;
debugger;
var fieldValue = field.value;
if (!fieldValue) {
field.focus();
keepGoing = false;
}
});
};
$timeout(focustElement, 0);
}
};
}]);
我正在遍历所有表单元素,并试图将焦点集中在第一个空字段上。然而,当我调用focus()时,元素并没有被聚焦。原因是什么?
更新:
奇怪,但如果我删除调试器语句(或者根本不打开检查器模式)并且不暂停javascript代码,它将首先关注空元素。。。。(我使用的是谷歌浏览器)
Plunker:http://plnkr.co/edit/YT0DoTjUVrrnVwmyrX0v?p=preview
您的超时位置不对。您可以使用jquery来执行一些提升操作。我不知道如何过滤空输入,所以使用了for循环(有人请改进一下)。
将此指令添加到模块中,然后在要设置焦点的父元素上添加属性"焦点优先"。
.directive('focusFirst', ['$timeout', function ($timeout) {
return {
restrict: "A",
link: function (scope, element, attrs) {
$timeout(function() {
var inputs = element.find('input'),
count = inputs.length;
for (var i = 0; i < count; i++) {
if (inputs[i].value) {
continue;
}
inputs[i].focus();
break;
}
}, 0);
}
};
}]);
我做了一个测试,似乎是$timeout中的0值。把它改成300或类似的数字。有了300个工作,你就可以打开或不打开开发工具。
适用于我。
相关文章:
- NodeJS readline有时会打印回第一个输入行(但并不总是,看起来是随机的)
- 将焦点设置在下拉切换的角度 js 上的第一个输入字段上
- 只能使用第一个输入框输入注释.他们不为其余的工作
- 单选按钮仅显示第一个输入,如何获得所需的输入
- 将焦点设置在带有错误消息的第一个输入元素上,并将包含它的 TabStrip 选项卡设置为活动状态
- Javascript onclick 将第二个输入框的值更改为与第一个输入框的值相同
- 填充 HTML,选择“使用第一个输入标记”
- 如何聚焦对话框中的第一个输入框
- Javascript只验证我的第一个输入
- 如何在用户完成第一个输入文本的键入后设置和聚焦最后一个输入文本
- DurandalJs:一种通用解决方案,用于将焦点放在组合视图上的第一个输入元素上
- 从具有特定类的第一个输入中获取父窗体元素
- WebBrowser注入Javascript将焦点设置为第一个输入框
- 选择第一个输入,但不要't选择类型=隐藏
- 关注克隆行后的第一个输入
- 为什么所有图像都更改为第一个输入
- 检查第一个输入
- 我在html中有两个输入字段,我在想如何将第一个输入字段的值自动转换为下一个输入字段
- jQuery根据第一个输入的文本框值填充数组命名的表单字段
- 只有在没有输入集中的情况下,才将第一个输入集中在负载上