setTimeout内不支持jquery的选择器的解决方案_javascript技巧

今天在写一个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);
  }
); 

以上所述就是本文的全部内容了,希望大家能够喜欢。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索settimeout
jquery选择器
jquery settimeout、javascript 选择器、javascript属性选择器、jquery清除settimeout、jquery的settimeout,以便于您获取更多的相关知识。

时间: 2024-09-20 05:37:08

setTimeout内不支持jquery的选择器的解决方案_javascript技巧的相关文章

setTimeout内不支持jquery的选择器的解决方案

  在JS中无论是setTimeout还是setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,这就需要想方法解决. 今天在写一个js延时事件的时候发现在setTimeout这个方法里面使用jquery的$(this)竟然不起作用,各种测试,最后得出结论是setTimeout内不支持jquery的选择器.于是请教了一下QQ上做jquery开发的高手,马上就把这问题解决了,在这里记录一下. 下面是作者做延时处理时的js代码: ? 1 2 3 4 5 6 7 8

ie 7/8不支持trim的属性的解决方案_javascript技巧

在ie 7 8浏览器中,如果使用trim()属性去除空格的话,则会导致报错. 因此解决这个问题有如下方案: var aa = $("#id").val().trim()   --- 在IE中无法解析trim() 方法 解决办法: [   var aa = $.trim($("#id").val());  ] 这个不好用,还是用下面介绍的吧,第一个已经过测试.  W3C那帮人的脑袋被驴踢了,直到java script1.8.1才支持trim函数(与trimLeft,t

JS中setInterval、setTimeout不能传递带参数的函数的解决方案_javascript技巧

在JS中无论是setTimeout还是setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数, 这就需要想方法解决. 一.采用字符串形式:--(缺陷)参数不能被周期性改变 setInterval("foo(id)",1000); 二.匿名函数包装 (推荐) 复制代码 代码如下: window.setInterval(function() { foo (id); }, 1000); 这样就可以周期性执行foo(id)这个函数,而且把变量id传递进去: 三

仅IE不支持setTimeout/setInterval函数的第三个以上参数_javascript技巧

复制代码 代码如下: setTimeout(function(obj){ alert(obj.a); }, 2000, {a:1}); 即传了第三个参数,第三个参数将作为回调函数的参数obj传入.在非IE浏览器中都弹出了1.这样有个好处,即解决了回调函数的执行上下文,比如要调用某个对象的某个方法,即可以通过参数把该对象传进去. 复制代码 代码如下: setTimeout(function(obj){ obj.method(); }, 2000, obj); 当然,你还可以传多个参数给回调函数,如

让JavaScript中setTimeout支持链式操作的方法_javascript技巧

修改很简单,通过参数判断,然后返回下promise对象 复制代码 代码如下: (function() {   var timeout = setTimeout;   window.setTimeout = function(fn, time) {     if (!time) {       time = fn;       return $.Deferred(function(dfd) {         timeout(function() {           dfd.resolvel(

详解用原生JavaScript实现jQuery的某些简单功能_javascript技巧

大致介绍 学习了妙味,用原生的JavaScript实现jQuery中的某些部分功能 定义自己的函数库lQuery $()选择器的实现 jQuery是面向对象的,所以自己编写的也要是面向对象的,看看基本的结构 // 定义lQuery对象 function lQuery(lArg){ } function lQ(lArg){ return new lQuery(lArg); } // css()方法 lQuery.prototype.css = function(){}; // html()方法 l

实现png图片和png背景透明(支持多浏览器)的方法_javascript技巧

虽然有让IE6支持PNG透明背景的JS程序,都是不是很方便,还是用CSS来实现的好.使用到的就是:IE5.5+的AlphaImageLoader滤镜. 1.png背景透明 解决办法: 复制代码 代码如下: #div1 { height: 600px; width: 260px; padding: 20px; background-repeat: repeat; } html>body #div1 { background-repeat: repeat;background-image: url(

解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法_javascript技巧

今天检查自己用JQuery+AJAX+PHP做的网站后台登录检测,发现登陆成功后执行页面跳转函数这段JavaScript(JS)代码特效在IE和谷歌浏览器Chrome下都可以很好地执行,兼容性还不错.结果到了火狐(FireFox)浏览器下setTimeout这个JS内置函数不执行了,无效了,也没报错!打开FireBUG指望它能检测出JS的错误,结果没用...Javascript(JS)脚本代码在各浏览器下的兼容是一个很头疼的问题,经过一番调试和搜索,终于解决了setTimeout这个JS代码在火

深入理解jQuery()方法的构建原理_javascript技巧

前言 虽然JQuery相对简单,但要全面掌握,且快速灵活的使用它也并不那么容易,它提供了很多方法,包含了网页开发的各个知识面,所以要全面掌握这些知识点,个人认为还是需要对jquery有深入的理解,对这些知识点做分类整理记忆,这样你才能面对一些JQuery代码的时候不会感到迷惑,才会知道采用何种方式实现某个特效是最佳实践,才能快速的采用JQuery来进行项目开发. jQuery中最常用方法的就是jQuery( ) ,也即$( ) . jQuery( )是一个函数调用,调用的结果是返回了一个jQue