ugrás a tartalomhoz

jQuery setTimeout $(this)

PaksaTomi · 2011. Már. 25. (P), 17.22
Sziasztok!

jQuery-ben egy hasonló dolgot szeretnék csinálni, mint a .bind() azzal a különbséggel, hogy a lefutó függvény késleltetéssel induljon.
Meg is csináltam, és működik is, egy apró hibával, amit jó lenne kiküszöbölni:
Mégpedig, hogy a callback függvényben a $(this) nem az elem a $(window) objektumot adja vissza.

Tehát konkrétan az alábbi kódban az a problémám, hogy a $this != $$, és így az eventHandler függvényben a $(this) = $(window).

Tudnátok segíteni ebben?

Köszönettel:
Paksa Tomi
  1. ;(function($){  
  2.   $.fn.bindDelay = function(eventType, eventHandler) {  
  3.     return $(this).each(function() {  
  4.       var $this = $(this);  
  5.       $(this).bind(eventType, function(eventObj) {  
  6.         var $this = $(this);  
  7.         window.setTimeout(function() {  
  8.           var $$ = $(this);  
  9.           eventHandler(eventObj);  
  10.         }, 500);  
  11.       });  
  12.     });  
  13.   };  
  14. })(jQuery);  
 
1

Plugin, closure

Poetro · 2011. Már. 25. (P), 17.37
  1. (function($, window){  
  2.   $.fn.bindDelay = function(eventType, eventHandler, delay) {  
  3.     // Nem szükséges a $(this), elvégre eleve azt kapjuk this-ként  
  4.     return this.each(function() {  
  5.       $(this).bind(eventType, function(eventObj) {  
  6.         // Eltároljuk az elemet closure-ban.  
  7.         var target = this;  
  8.         window.setTimeout(function() {  
  9.           // a callback-ben megfelelő objektum lesz a this.  
  10.           eventHandler.call(target, eventObj);  
  11.           // lehetőség megadni, hogy mi legyen a delay.  
  12.         }, delay || 500);  
  13.       });  
  14.     });    
  15.   };    
  16. })(jQuery, this);  
2

Frankón működik.

PaksaTomi · 2011. Már. 28. (H), 08.36
Frankón működik.
Köszi a segítséget!