2015-04-28 52 views
2

我有一個指令來自動集中下一個輸入,如下所示。該項目是Ionic的angularJs。它在另一個項目中工作(這是基於電話的 - 不是離子的),但是在這個離子項目中它不是在玩球。標記是一樣的。爲什麼jqLit​​e不能在我的代碼中首次集中?

(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瀏覽器開發工具不開放。它也不適用於設備。我看不出有什麼區別,這可能是一個較慢的執行週期?

+0

您可能需要運行digest cycle..while處理事件 –

+0

您是否嘗試過使用'ng-keyup'? – charlietfl

+0

@pankajparkar你的意思是使用$ scope。$ apply()/ $ timeout?我試過 –

回答

0

我在設備上有類似的問題。

如果您使用的離子+ AngularJS,原來你需要添加離子鍵盤插件,這些偏好config.xml中

<preference name="KeyboardDisplayRequiresUserAction" value="false" /> 

<feature name="Keyboard"> 
    <param name="ios-package" value="IonicKeyboard" onload="true" /> 
</feature> 

KeyboardDisplayRequiresUserAction偏好是阻礙對焦功能之一。

相關問題