少し長めですが、我慢してください:
多くのqTip2を含むフォームを囲むasp.netupdatepanel、一部のajaxベースの一部はそうではありません。
したがって、ポストバック(非同期更新と更新を起動する)を発生させた直後にqTip2にカーソルを合わせると、qtipのjavascriptが起動を開始し、戻り時にqtipを作成しますが、イベント発生要素が存在しなくなったため、qipは開いたままになります(display:block )そしてドキュメントの左上に表示されます(一部のコードは.positionを計算しようとしますが、要素にはもう何もありません)。
ここでエラーを確認できます:http://www.matclad.co.uk/brick-slip-blends.aspx
つまり、デザインをクリックしてみてください。クリックしたらすぐに、デザインを左または右に移動します。qTipはそのまま残ります。レンガを追加するときにもそれを行うことができますが、それは時間を計るのがより困難です
qTipを作成しているコードは次のとおりです。
//簡潔にするために関数をトリミング
var els = $('div.pallet li.item .photo > input, div.lower li.chosen-item .photo > input');
els.click(function(){els.each(function(){$(this).qtip('destroy')});})
$('div.pallet li.item .photo > input, div.lower li.chosen-item .photo > input')
.each(function(){
var id = $(this).parent().attr('rel');
$(this).qtip({
content: { text:'Loading...',
ajax: { contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: '/brick-slip-blends.aspx/GetDataForSlip',
data: '{Id:' + id + '}', type: 'POST',
beforeSend: function(jqXHR, settings){
return !Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack();
},
success: function(data, status){
this.set('content.text', data.d);
},
complete: function(){}
}
},
hide: { event: 'click mouseout' },
show: { delay: 500 }
});
});
$('.qt').click(function(){$(this).qtip('destroy');});
$('.qt').qtip();
この問題を回避しようとすると、クリック時にセレクター内の他のqtipsが破棄されますが、これは完全には機能していません(部分的に修正されていますが)。また、PageRequestManagerメソッド(atlas ajax API)
この問題を回避するには、どのような戦略を使用する必要がありますか?考えられるajaxキューイングの問題?(qtipに渡された関数で)作成をキャンセルするグローバルスイッチ?
助けてください私はこれに苦労してきました、そしてどんな助けでもいただければ幸いです。
よろしく、