我有一個指令來自動集中下一個輸入,如下所示。該項目是Ionic的angularJs。它在另一個項目中工作(這是基於電話的 - 不是離子的),但是在這個離子項目中它不是在玩球。標記是一樣的。爲什麼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(‘輸入’)第一。 ()。焦點();」
這確實按下了本地鍵盤,但未集中下一個輸入。奇怪的是,當我'選項卡'到下一個輸入,然後指令工作,我可以回到第一個和它的自動選項卡按預期。
就綁定指令而言,我可以調試並看到它正在觸發,所以它不能成爲與此相關的問題。 HTML是靜態的,所以它不是事件委託問題。
我對此感到困惑,我唯一不斷回來的事實是,最初的.focus()看起來實際上並沒有關注,以及它每隔一段時間都會如此。
我試着把它包裝在$ timeout和$ scope中。$ apply()但似乎不工作。
有沒有人有任何想法我可以嘗試?
編輯
奇怪的是,它按預期工作,當我的Chrome瀏覽器開發工具不開放。它也不適用於設備。我看不出有什麼區別,這可能是一個較慢的執行週期?
您可能需要運行digest cycle..while處理事件 –
您是否嘗試過使用'ng-keyup'? – charlietfl
@pankajparkar你的意思是使用$ scope。$ apply()/ $ timeout?我試過 –