前言
今天在項(xiàng)目中遇到了這個(gè)奇葩的問題,基于ionic的iOS的hybird APP 無法使用focus()獲取焦點(diǎn)和鍵盤的問題。下面讓我們來解決這個(gè)問題。
問題:基于ionic的iOS的hybird APP 無法使用focus()獲取焦點(diǎn)和鍵盤的問題。
我的代碼如下:
directive:
.directive('myFocus', function($timeout, $parse) {
return {
link: function(scope, element, attrs) {
var model = $parse(attrs.myFocus);
scope.$watch(model, function(value) {
if(value === true) {
$timeout(function() {
element[0].focus();
});
}else if(value === false){
$timeout(function() {
element[0].blur();
});
}
})
}
}
})
html:
<input id="myCommentsInputId" my-focus="isOpen" type="text" placeholder="說點(diǎn)什么">
這么一段簡單的代碼,在chrome和Android上面調(diào)試是正常的,然而在iOS就是怎么也出不來。
堅(jiān)決尋找解決方案
然后我開始了google、baidu的歷程,在知識(shí)的海洋里翱翔,看到很多奇怪的現(xiàn)象,而且也并沒有解決我的問題。
好像在 http://twilight.btlogs.com/how-to-focus-html-input-element-with-javascript-on-ios-and-android-mobile-safari/
這里面主要說的是,只有在監(jiān)聽了用戶觸發(fā)的時(shí)間的函數(shù)中執(zhí)行focus才有用,具體可以點(diǎn)進(jìn)去看一下。
我嘗試了一下,發(fā)現(xiàn)這個(gè)對于hybird App也是沒有任何效果。
但是可能在普通的iOS,html5頁面會(huì)生效的,這個(gè)我沒有嘗試,也請嘗試過得朋友告訴一下我。
我寫的類似于這樣,以下也符合他們說的:
.directive('focusMe', function($timeout) {
return {
link: function(scope, element) {
element[0].on('click',function(){
element[0].focus();
})
$timeout(function() {
element[0].trigger('click');
},300);
}
};
})
我的解決方案
原來,在iOS App的配置文件(config.xml),里面默認(rèn)會(huì)有一句
<preference name="KeyboardDisplayRequiresUserAction" value="true" />
這里面的大概意思就是,鍵盤的顯示需要用戶去觸發(fā),而且是設(shè)置為true的!?。?br> 那么下面你們知道怎么做了吧,只需要把value的值改為false,一切都解決了。
<preference name="KeyboardDisplayRequiresUserAction" value="false" />
結(jié)束
凡事多去研究它的根源問題。