そのため、iScroll + Android + Form フィールドはうまく連携していないようです。テキストボックスが消える、正しく機能しない、キーボードがページ全体を上に移動するなどの厄介な問題に直面しました。奇妙なもの。
すべてのテキストボックス/選択/フォームフィールドを stopPropagation
オンにして解決し、問題を解決しました。touchstart
var selectField = document.getElementById('textbox');
selectField.addEventListener('touchstart', function(e) {
e.stopPropagation();
//updateScrollPosition(this, true);
}, false);
編集
私が考えることができる他の回避策は、選択した要素でタッチが発生したときにスクロールを防ぐために onBeforeScrollStart をオーバーライドすることです (ここでは入力、選択、およびテキストエリアが問題でしたが、何でもターゲットにできます)。
iScroll.options.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();
}};
}
編集2
したがって、上記のどちらも役に立ちませんでした。しばらく前に同じことが起こったので、その問題を解決するための(恐ろしい)ハックを思いつきました。このコードを共有することはできませんが (ああ、ライセンスです!)、私が行った手順は次のとおりです。
- Android かどうかを確認し、バージョンが 3.0 未満であることを確認します
- 入力を非表示にして div に置き換えます
- div をクリックすると、非表示の EditText のクリックをトリガーするネイティブ ビット レイヤーが実行されます。
- textChangeListener を追加し、すべてを div と入力にコピーします。
- それがあなたが見つけた最良の解決策であることに本当に腹を立て、キーボードを机に繰り返し叩きつけます。