【发布时间】:2012-09-05 00:39:29
【问题描述】:
我正在实现我自己的“工具提示”,每次您将鼠标悬停在它上面时它都会创建一个新的 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 */
}
);
【问题讨论】:
-
我怀疑
mouseleave事件没有被触发。在删除元素之前输入alert("out");以验证它。fieldName更可能发生更改,因此您尝试删除的元素不存在。我建议将工具提示作为插件实现。 -
@maenu:我宁愿选择
console.log... -
@maenu 我放了 alert(fieldName) 看看它是否保持不变,它总是被设置,但是,它也总是被调用。所以问题是 .remove();不工作。
标签: jquery