Javascript clearTimeout在嵌套函数中不工作
我认为这与嵌套函数有关,但它们必须是这样。为什么不起作用?我在做傻事吗?这是一个单独的示例,我必须使用Javascript clearTimeout在嵌套函数中不工作,javascript,jquery,nested,settimeout,Javascript,Jquery,Nested,Settimeout,我认为这与嵌套函数有关,但它们必须是这样。为什么不起作用?我在做傻事吗?这是一个单独的示例,我必须使用$(This),所以我似乎必须嵌套函数 HTML: JSFiddle: 感谢您的关注:) 您的.on()不应嵌套。实际上,每次将鼠标悬停在元素上时都会附加一个新的处理程序 编辑:根据问题澄清 使用.one()而不是.on() 您的.on()不应嵌套。实际上,每次将鼠标悬停在元素上时都会附加一个新的处理程序 编辑:根据问题澄清 使用.one()而不是.on() 从mouseenter事件中移动
$(This)
,所以我似乎必须嵌套函数
HTML:
JSFiddle:
感谢您的关注:)
您的.on()
不应嵌套。实际上,每次将鼠标悬停在元素上时都会附加一个新的处理程序
编辑:根据问题澄清
使用.one()
而不是.on()
您的.on()
不应嵌套。实际上,每次将鼠标悬停在元素上时都会附加一个新的处理程序
编辑:根据问题澄清
使用.one()
而不是.on()
从
mouseenter
事件中移动您的mouseleave
,它就会工作
var t;
$('.box').on('mouseenter', function() {
clearTimeout(t);
$('.box').addClass('blue');
});
$('.box').on('mouseleave', function() {
t = setTimeout(function() {
$('.box').removeClass('blue');
}, 2000);
});
演示:从
mouseenter
事件中移动您的mouseleave
,它就会工作
var t;
$('.box').on('mouseenter', function() {
clearTimeout(t);
$('.box').addClass('blue');
});
$('.box').on('mouseleave', function() {
t = setTimeout(function() {
$('.box').removeClass('blue');
}, 2000);
});
演示:id添加
if(t){clearTimeout(t);}
和if(!t){setTimeout(function()..
只是为了确保计时器不可能冒泡而导致它多次运行。或者试图清除一些未设置但只是我的错误时间,我不是失败的投票者..只是把它放出来哦!我的示例不好,我必须使用$(此)
@gdoron我确信是时候添加带有注释功能的DV了。否则,DV作为一个函数没有任何意义:/id addif(t){clearTimeout(t);}
和if(!t){setTimeout(function()..
只是为了确保计时器不可能冒泡而导致它多次运行。或者试图清除一些未设置但只是我的错误时间,我不是失败的投票者..只是把它放出来哦!我的示例不好,我必须使用$(此)
@gdoron我确信是时候添加带有注释功能的DV了。否则,DV作为一个函数没有任何意义:/谢谢您的输入,但我需要使用$(此)
。为错误的解释道歉!@AlexKempton-在mouseenter
/mouseleave
事件处理程序上下文中,这两个实例都指向同一个所有者。这就是它工作的原因。@AlexKempton-上面更新了。这肯定回答了这里的问题,但实际上并不能解决我的问题,我的隔离不够准确。接受此消息并再次发布(更详细,稍有不同的问题)会给我带来麻烦吗?对其进行排序!事件计时器触发了大量事件,因为正如您所说,它每次都附加一个新的处理程序,并在我的实际示例中搅乱更广泛的方案。使用.off()
进行排序。感谢您的输入!感谢您的输入,但我需要使用$(此)
。为错误的解释道歉!@AlexKempton-在mouseenter
/mouseleave
事件处理程序上下文中,这两个实例都指向同一个所有者。这就是它工作的原因。@AlexKempton-上面更新了。这肯定回答了这里的问题,但实际上并不能解决我的问题,我的隔离不够准确。接受此消息并再次发布(更详细,稍有不同的问题)会给我带来麻烦吗?对其进行排序!事件计时器触发了大量事件,因为正如您所说,它每次都附加一个新的处理程序,并在我的实际示例中搅乱更广泛的方案。使用.off()
进行排序。感谢您的输入!
var t;
$('.box').on('mouseenter', function() {
clearTimeout(t);
$('.box').addClass('blue');
});
$('.box').on('mouseleave', function() {
t = setTimeout(function() {
$('.box').removeClass('blue');
}, 2000);
});