У меня есть директива для автоматической фокусировки следующего входа, как показано ниже. Проект является угловым для ионического. Он работает в другом проекте (который основан на телефоне - не ионный), но в этом ионном проекте он не играет в мяч. Разметка такая же.Почему в моем коде не первый раз фокусируется на jqLite?
(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>
Самое странное в том, что при отладке я могу увидеть код выполнения строки «elem.nextAll („вход“) первым.() .focus();»
Это нажимает на родную клавиатуру, но не фокусирует следующий вход. Странно, когда я перехожу к следующему входу, тогда директива работает, и я могу вернуться к первой и автоматической вкладкам, как и ожидалось.
С точки зрения привязки директивы, я могу отлаживать и видеть, как это срабатывает, поэтому это может быть проблема, связанная с этим. HTML является статическим, поэтому это не проблема делегирования событий.
Я озадачен этим, единственное, что я продолжаю возвращать, - это тот факт, что начальный .focus(), похоже, не фокусируется, и каждый раз, когда он это делает.
Я пробовал обернуть его в $ timeout и $ scope. $ Apply(), но не работает.
У кого-нибудь есть представление о чем-то, что я могу попробовать?
EDIT
Как ни странно, это работает, как ожидалось, когда мои Chrome Dev инструменты не открыт. Он также не работает на устройстве. Я не вижу, какая разница здесь будет отличаться от, возможно, более медленного цикла выполнения?
вам, возможно, потребуется запустить цикл дайджеста. В то же время, имея дело с событиями –
, вы пробовали использовать 'ng-keyup'? – charlietfl
@pankajparkar вы имеете в виду, используя $ scope. $ Apply()/$ timeout? Я пробовал это –