Maison  >  Article  >  interface Web  >  Solution au sélecteur jquery qui n'est pas pris en charge dans les compétences setTimeout_javascript

Solution au sélecteur jquery qui n'est pas pris en charge dans les compétences setTimeout_javascript

WBOY
WBOYoriginal
2016-05-16 16:01:471347parcourir

Lorsque j'écrivais un événement de retard js aujourd'hui, j'ai découvert que l'utilisation de $(this) de jquery dans la méthode setTimeout ne fonctionnait pas. Après divers tests, j'ai finalement conclu que le sélecteur de jquery n'était pas pris en charge dans setTimeout. J'ai donc demandé conseil aux experts en développement jquery sur QQ, et ils ont résolu le problème immédiatement. Je l'enregistrerai ici.
Voici le code js utilisé par l'auteur lors du traitement différé :

$('.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); 
  } 
); 

Faites attention au code dans setTimeout dans le code ci-dessus. Si ces codes ne sont pas dans cette méthode, il n'y a pas de problème en soi, mais dans ce cas, une erreur sera signalée. Quant à la raison, l’auteur ne l’a pas encore compris. Après avoir été éclairé par les internautes, je l'ai changé comme suit et tout ira bien. La méthode est très astucieuse. Voici le code correct :

$('.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); 
  } 
); 

Ce qui précède représente l’intégralité du contenu de cet article, j’espère que vous l’aimerez tous.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn