此代码(某种工具提示)在IE,Opera,chrome,safari中运行良好。但不是在Firefox中。 我认为问题出在clearTimeout()函数中。有谁知道出了什么问题?
谢谢!
$('.go_info').live("mouseenter", function(e){
var q_tooltip_img = $(this).attr('id');
tm = setTimeout( function(){
$("#tooltip_"+q_tooltip_img).show();
}, 1000);
tm_img = setTimeout( function(){
$("#tooltip_img_"+q_tooltip_img).empty().html('<div class="PP_wait_loading"></div>');
$("#tooltip_img_"+q_tooltip_img).load("PP_small_preview.php?ID="+q_tooltip_img);
}, 1000);
});
$('.go_info').live("mouseleave",function(){
clearTimeout(tm);
clearTimeout(tm_img);
var q_tooltip_img = $(this).attr('id');
$("#tooltip_"+q_tooltip_img).hide();
});
因此,当鼠标进入go_info div时,此脚本会显示div。一旦鼠标离开go_info div,就必须离开。 这适用于所有浏览器,从FF执行,这只是显示div的一些闪烁。
答案 0 :(得分:1)
此代码假定tm
和tm_img
是全局变量。它还假设页面中只有一个对象具有.go_info
类,因为如果该类有多个对象,则多个事件处理程序都在尝试使用相同的全局变量,并且它们可能会混乱其他的。
更安全的代码版本就是这样的(变量现在是局部变量,定时器是按DOM对象而不是全局变量持久存储的):
$('.go_info').live("mouseenter", function(e){
var q_tooltip_img = $(this).attr('id');
var tm = setTimeout( function(){
$("#tooltip_"+q_tooltip_img).show();
}, 1000);
$(this).data("tm", tm);
var tm_img = setTimeout( function(){
$("#tooltip_img_"+q_tooltip_img).empty().html('<div class="PP_wait_loading"></div>');
$("#tooltip_img_"+q_tooltip_img).load("PP_small_preview.php?ID="+q_tooltip_img);
}, 1000);
$(this).data("tm_img", tm_img);
});
$('.go_info').live("mouseleave",function(){
clearTimeout($(this).data("tm"));
clearTimeout($(this).data("tm_img"));
var q_tooltip_img = $(this).attr('id');
$("#tooltip_"+q_tooltip_img).hide();
});
其他可能出错的事情:
$("#tooltip_"+q_tooltip_img)
正常工作。正如您在this jsFiddle中所看到的,如果一切正确,基本概念将与ID操作一起使用。如果您仍然无法弄明白,我建议您发布相关的HTML。