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


;(function($){
  $.fn.bindDelay = function(eventType, eventHandler) {
    return $(this).each(function() {
      var $this = $(this);
      $(this).bind(eventType, function(eventObj) {
        var $this = $(this);
        window.setTimeout(function() {
          var $$ = $(this);
          eventHandler(eventObj);
        }, 500);
      });
    });
  };
})(jQuery);

 
1

Plugin, closure

Poetro · 2011. Már. 25. (P), 17.37
(function($, window){
  $.fn.bindDelay = function(eventType, eventHandler, delay) {
    // Nem szükséges a $(this), elvégre eleve azt kapjuk this-ként
    return this.each(function() {
      $(this).bind(eventType, function(eventObj) {
        // Eltároljuk az elemet closure-ban.
        var target = this;
        window.setTimeout(function() {
          // a callback-ben megfelelő objektum lesz a this.
          eventHandler.call(target, eventObj);
          // lehetőség megadni, hogy mi legyen a delay.
        }, delay || 500);
      });
    });  
  };  
})(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!