我想在删除包含clearInterval
函数的div后自动执行setInterval
函数,这个div是ajax响应的结果,因为它在删除div后不会自行停止。
$('#element').mouseover(function(){
$.post('ajax/ajax.php', function(data) {
$('<div id="tooltip'></div>").appendTo("div#main");
$('#tooltip').html(data);
$('#tooltip').show();
});
}).mouseout(function(){
clearInterval(intervalId);
$('#tooltip').empty();
$('#tooltip').remove();
});
ajax响应data
包含带有间隔ID处理程序的javascript setInterval
函数:
var intervalId = window.setInterval(pics_load, 3000);
我尝试使用Jquery unload但同样的问题:
$('#tooltip').unload(function(){
clearInterval(intervalId);
}
我还尝试在ajax响应中使用它:
$(window).unload(function(){
clearInterval(intervalId);
}
答案 0 :(得分:3)
您是否尝试使用#element
在$.data
上存储intervalId?
$('#element').mouseover(function() {
var $this = $(this);
$.post('ajax/ajax.php', function(data) {
$('<div id="tooltip'></div>").appendTo("div#main");
$('#tooltip').html(data);
$('#tooltip').show();
// save interval id here
var intervalId = setInterval('pics_load', 3000);
$this.data('intervalId', intervalId);
});
}).mouseout(function(){
// retrieve intervalId here
var intervalId = $(this).data('intervalId');
clearInterval(intervalId);
$('#tooltip').empty();
$('#tooltip').remove();
});
答案 1 :(得分:2)
我仍然对你一般要做的事感到困惑......所以我会假设:
#element
时,您希望从服务器获取帮助说明,很快用户就会删除对该元素的关注,您希望隐藏帮助说明女巫听起来很合理...... setInterval()
在哪里到位?为什么你需要使用这样的方法?你只想在第一次过度行动中展示它吗?
作为一名优秀的开发人员,我会这样做:
data-
属性保存说明并在可用时重复使用我假设的HTML
<div class="container">
<h1>Stackoverflow</h1>
<ul>
<li>Element 1</li>
<li>Element 2</li>
<li>Element 3</li>
<li>Element 4</li>
<li>Element 5</li>
</ul>
</div>
作为jQuery我会做这样的事情
$(function() {
$("ul li").hover(
function() {
// on mouse over
if($(this).prop("data-tooltip") === undefined) {
// use $.post() and retrieve the tooltip description,
// then place it on data-tooltip property
$.post('ajax/ajax.php', function(data) {
// save for next time
$(this).prop("data-tooltip", data);
// show
tooltip($(this), $(this).prop("data-tooltip"));
});
}
else {
// show saved description
tooltip($(this), $(this).prop("data-tooltip"));
}
},
function() {
// on mouse out
tooltip();
}
);
});
function tooltip(elm, msg) {
if(msg)
$("<span class='tooltip' />").stop().html(msg).appendTo(elm).show();
else
$(".tooltip").hide();
}
作为一个简单示例,这里是Live Demo on JsBin。
如果您希望更多地缩小代码,可以使用 CSS框架来帮助您。
答案 2 :(得分:1)
在块之外声明 intervalId ,并且在分配时不要使用 var 。 在设置间隔之前检查 intervalId 是否仍未使用也是一个好主意。
var intervalId=null;
$('#element').mouseover(f unction(){
$.post('ajax/ajax.php', function(data) {
$('<div id="tooltip'></div>").appendTo("div#main");
$('#tooltip').html(data);
$('#tooltip').show();
//somewhere inside this should be:
if (!intervalId) ... //then set the interval
});
}).mouseout(function(){
clearInterval(intervalId);
intervalId=null;
$('#tooltip').empty();
$('#tooltip').remove();
});