Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript clearTimeout在嵌套函数中不工作_Javascript_Jquery_Nested_Settimeout - Fatal编程技术网

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 add
if(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);
})​;