私は独自の「ツールチップ」を実装しており、ホバーするたびに新しい div 要素を作成し、ホバーアウトすると削除します。以下のコードは、私が使用しているものから削除されていますが、問題を示しています: このコードは、ユーザーがゆっくりとマウスを $('#' + fieldName) オブジェクトの上に置いたり離したりするときに完璧に機能しますが、マウスを上に移動するとオブジェクトをツールチップからすばやく引っ張っても、削除されません。コードを改善する方法はありますか?
すべてのツールチップ ボックスを作成して非表示にし、ホバー時に表示するシステムを実装しようとしましたが、マウスがオブジェクトからすばやく移動し、ホバー アウトが起動しないという同じ問題が発生しました。
$('#' + fieldName).hover(
function () { /* Create new DOM element */
/* My ajax stuff here */
var data = 'test';
var tooltipBox = $('<div id="' + fieldName + '_tooltip">' + data + '</div>');
$("body").prepend(tooltipBox);
},
function () { /* Remove Tooltip from DOM */
$('#' + fieldName + '_tooltip').remove();
}
);
答え:
Robert Koritnik と sajawikio の助けを借りて:
ホバーでAJAX呼び出しを使用してホバーでツールチップを作成する必要がある場合は、それを機能させるために小さなハックを行うことができます。
var callingAjax = false;
var removeTooltip = false;
$('#tooltip').hover(
function() {
callingAjax = true;
$.post(.. {
callingAjax = false;
/* do stuff */
if(removeTooltip)
/* code to remove tooltip */
removeTooltip = false;
});
},
function() {
if(callingAjax)
removeTooltip = true;
else
/* code to remove tooltip */
}
);