setTimeout内不支持jquery的选择器的解决方案
今天在写一个js延时事件的时候发现在setTimeout这个方法里面使用jquery的$(this)竟然不起作用,各种测试,最后得出结论是setTimeout内不支持jquery的选择器。于是请教了一下QQ上做jquery开发的高手,马上就把这问题解决了,在这里记录一下。
下面是作者做延时处理时的js代码:
$('.dl_select dt').hover(
function(){
clearTimeout(t3);
$(this).siblings('dd').css({'display':'block','cursor':'pointer'});
},
function(){
t2=setTimeout(function(){$(this).siblings('dd').css({'display':'none'});},300);
}
);
$('.dl_select dd').hover(
function(){
clearTimeout(t2);
$(this).css({'display':'block','cursor':'pointer'});
},
function(){
t3=setTimeout(function(){$(this).css({'display':'none'});},200);
}
);
注意以上代码中得setTimeout里的代码,如果这些代码不在这个方法里面,本身是没有问题的,但是如上这种情况是会报错的。至于原因,作者现在也没有弄明白。经网友点化改成如下就没事儿了,方法很巧妙。如下是正确的代码:
$('.dl_select dt').hover(
function(){
clearTimeout(t3);
$(this).siblings('dd').css({'display':'block','cursor':'pointer'});
},
function(){
var $this=$(this).siblings('dd');
t2=setTimeout(function(){$this.css({'display':'none'});},300);
}
);
$('.dl_select dd').hover(
function(){
clearTimeout(t2);
$(this).css({'display':'block','cursor':'pointer'});
},
function(){
var $this=$(this);
t3=setTimeout(function(){$this.css({'display':'none'});},200);
}
);
以上所述就是本文的全部内容了,希望大家能够喜欢。
相关文章
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
下面小编就为大家带来一篇基于Bootstrap模态对话框只加载一次 remote 数据的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-07-07
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
这篇文章主要介绍了JavaScript字符串操作方法 slice、substr、substring及其IE兼容性 的相关资料,需要的朋友可以参考下2015-12-12
老生常谈document.ready和window.onload
这篇文章主要介绍了document.ready和window.onload的相关知识,包括document.ready和window.onload的区别,要使用document.ready()或者document.onload()的原因分析,本文结合实例代码给大家介绍的非常详细,需要的朋友参考下吧2024-01-01
JavaScript的History API使搜索引擎抓取AJAX内容
这篇文章主要介绍了JavaScript的History API使搜索引擎抓取AJAX内容 的相关资料,需要的朋友可以参考下2015-12-12


最新评论