广

JavaScript

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    setTimeout不支持$(this)等其他jquery选择器的解决办法

    2018-04-06 10:42:01 次阅读 稿源:互联网
    零七广告

    今天在写一个js延时事件的时候发现在setTimeout这个方法里面使用jquery的$(this)竟然不起作用,各种测试,最后得出结论是setTimeout内不支持jquery的选择器。于是请教了一下QQ上做jquery开发的高手,马上就把这问题解决了,在这里记录一下。

    下面是作者做延时处理时的js代码:

    1. $('.dl_select dt').hover( 
    2.     function(){ 
    3.         clearTimeout(t3); 
    4.         $(this).siblings('dd').css({'display':'block','cursor':'pointer'}); 
    5.     }, 
    6.     function(){ 
    7.         t2=setTimeout(function(){$(this).siblings('dd').css({'display':'none'});},300); 
    8.     } 
    9. ); 
    10. $('.dl_select dd').hover( 
    11.     function(){ 
    12.         clearTimeout(t2); 
    13.         $(this).css({'display':'block','cursor':'pointer'}); 
    14.     }, 
    15.     function(){ 
    16.         t3=setTimeout(function(){$(this).css({'display':'none'});},200); 
    17.     } 
    18. ); 

    注意以上代码中得setTimeout里的代码,如果这些代码不在这个方法里面,本身是没有问题的,但是如上这种情况是会报错的。至于原因,作者现在也没有弄明白。经网友点化改成如下就没事儿了,方法很巧妙。如下是正确的代码:

    1. $('.dl_select dt').hover( 
    2.     function(){ 
    3.         clearTimeout(t3); 
    4.         $(this).siblings('dd').css({'display':'block','cursor':'pointer'}); 
    5.     }, 
    6.     function(){ 
    7.         var $this=$(this).siblings('dd'); 
    8.         t2=setTimeout(function(){$this.css({'display':'none'});},300); 
    9.     } 
    10. ); 
    11. $('.dl_select dd').hover( 
    12.     function(){ 
    13.         clearTimeout(t2); 
    14.         $(this).css({'display':'block','cursor':'pointer'}); 
    15.     }, 
    16.     function(){ 
    17.         var $this=$(this); 
    18.         t3=setTimeout(function(){$this.css({'display':'none'});},200); 
    19.     } 
    20. ); 

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告