我有一个指令来自动聚焦下一个输入,如下所示。该项目是针对Ionic的angularJs。它适用于另一个项目(基于电话差距 - 不是离子),但在这个离子项目中,它没有打球。标记是一样的。
(function() {
'use strict';
angular.module('appname.directives')
.directive('focus', [function() {
return {
restrict: 'A',
link: function($scope,elem) {
//after character keypress the focus switches to the next input
elem.bind('keyup', function(e) {
if (e.keyCode >= 48 && e.keyCode <= 90 || e.keyCode >= 96 && e.keyCode <= 105) {
if (elem[0].value !== "") {
if (elem.nextAll('input') && elem.nextAll('input').length > 0) {
elem.nextAll('input').first().focus();
} else {
elem.parent().parent().nextAll(".module__inner").first().find('input').first().focus();
}
}
}
});
}
};
}]);
})();
html看起来有点像下面这样:
<div class="input-holder">
<input data-order="1" focus />
<input data-order="2" focus />
<input data-order="3" focus />
</div>
奇怪的是,在调试中我可以看到执行该行的代码 &#34; elem.nextAll(&#39;输入&#39)。第一()聚焦();&#34;
这确实会下推原生键盘,但不会关注下一个输入。奇怪的是,当我选择&#39;到下一个输入,然后指令工作,我可以回到第一个和它自动选项卡按预期。
在绑定指令方面,我可以调试并查看它的触发因此无法解决与此相关的问题。 HTML是静态的,因此没有事件委托问题。
我对此感到困惑,我唯一要回过头来的事实是,最初的.focus()似乎并没有实际聚焦,而且每隔一段时间就会聚焦。
我已尝试将其包装在$ timeout和$ scope中。$ apply()但似乎不起作用。
有没有人知道我可以尝试的东西?
修改
奇怪的是,当我的Chrome开发工具未打开时,它按预期工作。它也不适用于设备。我不知道这可能与较慢的执行周期有什么区别?
答案 0 :(得分:0)
我在设备上遇到类似的问题。
如果您使用的是Ionic + AngularJS,则需要在config.xml中添加Ionic Keyboard插件和这些首选项
TESTDB.ADMIN(ADMIN)=> select table_name, type_name from _V_SYS_COLUMNS where TABLE_NAME like 'EMP%';
TABLE_NAME | TYPE_NAME
------------+-----------------------
EMPLOYEES | BIGINT
EMPLOYEES | BIGINT
EMPLOYEES | CHARACTER VARYING(50)
EMPLOYEES | NUMERIC(20,2)
EMP_NM | BIGINT
EMP_SAL | BIGINT
(6 rows)
TESTDB.ADMIN(ADMIN)=> \t
Showing only tuples.
TESTDB.ADMIN(ADMIN)=> select table_name, type_name from _V_SYS_COLUMNS where TABLE_NAME like 'EMP%';
EMPLOYEES | BIGINT
EMPLOYEES | BIGINT
EMPLOYEES | CHARACTER VARYING(50)
EMPLOYEES | NUMERIC(20,2)
EMP_NM | BIGINT
EMP_SAL | BIGINT
KeyboardDisplayRequiresUserAction 首选项是阻碍焦点功能的首选项。