私は修正できないSafari for iPadで激しいバグが発生しました。iOS上のSafariのテキストエリアに一貫したイベントが発生しました
アーキテクチャ:
- バックボーン0.9.9
- jqueryの1.7.2
- jqueryの携帯1.3.1
ユーザーエージェント:
- のiOS 5.1.1 (iPad)
- Safari 5.1 mobile
- フルユーザーエージェント文字列:Mozilla/5.0(iPad;マックOS XのようなCUP OS 5_1_1)のAppleWebKit/Geckoのような534.46(KHTML、)バージョン/ 5.1モバイル/ 9B206サファリ/ 7534.48.3
私は、ネストされたがそれぞれ有する同じビューの10個のインスタンスを、持っていますtextarea要素を含むビュー。何らかの理由でテキストエリアをタップすると、ランダムにフォーカスされません。私は、タップ/クリックイベントから来ていないフォーカスイベントをトリガしようとすると、Safariモバイルがうんざりだと読んだが、これはダイレクトタップであり、依然として確実にピントを合わせることはできない。表示のために取り除かれたコードを次に示します。
var ParentView = Backbone.View.extend({
render: function() {
this.$el.html("<div class='textarea-container'></div>");
this.textareaView = new TextareaView({
el: this.$el.find('.textarea-container')
});
this.textareaView.render();
}
};
var TextareaView = Backbone.View.extend({
events: {
'tap .my-textarea': 'handleTextareaTap'
},
render: function() {
this.$el.html('<textarea rows="4" cols="80" class='my-textarea'></textarea>');
},
handleTextareaTap: function(event) {
console.log('TAPPED');
}
};
var i = 0;
while (i < 10) {
var view = new ParentView();
view.render();
$(body).append(view.$el);
i++;
}
タップイベントハンドラは時間の100%を起動します。コンソールは毎回「タップ」を正しく表示します。しかし、ほとんどの場合、ユーザエージェントはテキストエリアでのフォーカスに失敗します。私はSafariが発火し、どのような順番にされ、正確にどのイベント見にTextareaViewに次の行を追加しました:touchstart、vmouseover、vmousedown、touchend、vmouseup:
var TextareaView = Backbone.View.extend({
render: function() {
this.$el.html('<textarea rows="4" cols="80" class='my-textarea'></textarea>');
this.$el.find('.my-textarea').on('blur change click contextmenu copy cut dblclick focus focusin focusout hashchange keydown keypress keyup load mousedown mouseenter mouseleave mousemove mouseout mouseover mouseup mousewheel paste reset scroll select submit textinput unload wheel tap touch scrollstart scrollstop swipe swipeleft swiperight vclick vmousecancel vmousedown vmousemove vmouseout vmouseover vmouseup touchstart touchend touchmove touchcancel', function(event) {
console.log(event.type);
}
},
};
ここでテキストエリアが正しく焦点を当てたときに私が取得イベントの順序ですtouchstart、vmouseover、vmousedown、touchend、vmouseup:はVclick、タップ、vmouseout、のMouseMove、マウスダウン、とfocusIn、フォーカス、のmouseup、クリックし、focusout、
をぼかすここでテキストエリアにフォーカスに失敗したときに私が取得イベントの順序です、vclick、tap、vmouseout、mousemove
何らかの理由により、mousemoveの後のイベントが起動しません。私は無駄にApple's event handler documentationに注ぎました、そして私ができる
var TextareaView = Backbone.View.extend({
handleTextareaTap: function(event) {
// This still doesn't work:
this.$el.find('.my-textarea').trigger('focus');
// Neither does waiting for the synthesized WebKit events to fire:
var _this = this;
setTimeout(function(){
_this.$el.find('.my-textarea').trigger('focus');
}, 1000);
}
};
:私はまだが集中していないにもキーボードがポップアップしない、例えば、同様にこれらのイベントをトリガーする手動で試してみましたが、textarea要素ましたgithubのreposのいずれかでこれに関するバグレポートを見つけることはできません。私は理解していない
他の二つの奇妙な行動:
- TEXTAREAの最初のインスタンスは、常にテキストエリアが
どれ呼ばれてぼかしイベントにもかかわらず、焦点を当てて、正しく
乾杯、.focus後にこれを直接追加すること
あなたがこの問題の解決策を見つけますか?私は似たような問題に直面しており、あなたがそれをどのように解決したのか不思議です。 – alnafie
レンダリング関数(ここではとにかく)は、二重引用符を使用する必要があるクラス名の周りに一重引用符を使用します。それはあなたの質問を書いたときのタイプミスですか、それともあなたのコードの書き方ですか? – John
私は決して解決策を見いだすことはありませんでした。しばしば、プロジェクトスコープが変更されました:-)私たちはもはやこのライブラリをもはや使用していません。 – biegel