私はiPhoneスタイルのスクロールを提供するためにiScrollを使用しています。ただし、テキストボックスをクリックしても、キーボードは表示されません。
考えられる原因を見つけようとしたところ、iScroll
スクリプトを削除すると正常に機能することがわかりましたが、その場合はスクロール機能がありません。
これはiScrollのバグですか。はいの場合、テスト済みの回避策はありますか?または、iScrollの代替手段はありますか?
前もって感謝します。
私はiPhoneスタイルのスクロールを提供するためにiScrollを使用しています。ただし、テキストボックスをクリックしても、キーボードは表示されません。
考えられる原因を見つけようとしたところ、iScroll
スクリプトを削除すると正常に機能することがわかりましたが、その場合はスクロール機能がありません。
これはiScrollのバグですか。はいの場合、テスト済みの回避策はありますか?または、iScrollの代替手段はありますか?
前もって感謝します。
少なくともiScroll4では、このコードを追加して入力フィールドのクリックを有効にすることができます。examplesフォルダーのForm-fieldsのデモを参照してください。
<script type="text/javascript">
var myScroll;
function loaded() {
myScroll = new iScroll('wrapper', {
useTransform: false,
onBeforeScrollStart: function (e) {
var target = e.target;
while (target.nodeType != 1) target = target.parentNode;
if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA')
e.preventDefault();
}
});
}
document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
document.addEventListener('DOMContentLoaded', loaded, false);
</script>
エラーを解決することができました。問題はCSSにありました。
CSSがどういうわけか問題を引き起こしているのではないかと思いました。wrapper
とのCSSにコメントすると、キーボードが表示されたという理由でこれを結論付けましscroller
た...しかし、それらを保持すると、キーボードが機能しませんでした。を使用しbottom: 0px;
ていたのですが、どういうわけかキーボードが表示されないようでした。
削除するbottom: 0px;
と問題が解決しました。
これが他の人に役立つことを願っています。
この問題を解決するために、iScroll4.2の_startに次のコードを追加しました。
if (e && e.target && e.target.tagName) {
var bFocusField = ('|INPUT|TEXTAREA|BUTTON|SELECT|'
.indexOf('|' + e.target.tagName + '|') >= 0);
if (bFocusField || that.focusField) {
if (bFocusField) {
that.focusField = e.target;
} else {
that.focusField.blur();
that.focusField = null;
}
e.defaultPrevented = false;
e.returnValue = true;
return true;
}
}
関数の初期化部分の下にコードが挿入されます(that.moved = false; ... that.dirY = 0;)。
iPad 1(iOS 5.1)およびiPad 3(iOS 6)でテストしました。オンスクリーンキーボードはiScrollに干渉しないようです(私は5秒ごとにiScroll.refresh()を実行します)。
このソリューションが最適だと思いますiscroll.jsのコードを微調整します(次のように)
onBeforeScrollStart: function (e) {
//e.preventDefault();
if (e.target.nodeName.toLowerCase() == "select" || e.target.tagName.toLowerCase() == 'input' || e.target.tagName.toLowerCase() == 'textarea'){
return;
}
},