为什么jqLit​​e首次关注我的代码?

时间:2015-04-28 15:27:50

标签: jquery angularjs cordova ionic-framework jqlite

我有一个指令来自动聚焦下一个输入,如下所示。该项目是针对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开发工具未打开时,它按预期工作。它也不适用于设备。我不知道这可能与较慢的执行周期有什么区别?

1 个答案:

答案 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 首选项是阻碍焦点功能的首选项。