2014-06-30 67 views
3

我對從插件拋出的事件有點問題。我的插件正在拋出一個叫'initNewHeight'的事件,並且這個工作正常。現在我想在插件發送修改值的函數whitch叫這個插件...jQuery發送參數給一個事件

像這樣:

(function($) { 
     $.fn.meAutoSize = function (options, callback){ 
      var $this = $(this); 
      var $options = options || {}; 

      /* Optionen welche übergeben wurden in eine Variable speichern und mit den Standardwerten verbinden */ 
      $options = $.extend($.fn.meAutoSize.defaults, options); 

      /* Event an den EventHandler binden */ 
      $this.bind("initEvent", function() { options.init.call(); }); 

      /* Initialize Event auslösen, neu Inhalte laden */ 
      $this.trigger("initEvent", $this); 

      /* Initialize Event auslösen, neu Inhalte laden */ 
      $this.bind("initEventNewHeight", function() { options.initNewHeight.call() }); 

      var newHeight = 12 
      $this.trigger("initEventNewHeight", $this, newHeight); 
     }; 

     // Standard-Optionen für das Plugin 
     $.fn.meAutoSize.defaults = { 
      init: function() {}, 
      initNewHeight: function(el, newHeight) {} 
     } 
    })(jQuery); 


    $('.autoheight').meAutoSize({ 
     init: function() { 
      $('#Init').html('init function') 
     }, 

     initNewHeight: function(el, newHeight) { 
      $('#NewHeight').html('NewHeight: ' + el +', ' + newHeight) 
     } 
}); 

但這種方式是行不通的。

所以你可以看到它在這裏:http://jsfiddle.net/Tabes/qRPfm/

回答

1

嘗試改變,這一點:

$this.bind("initEventNewHeight", function() { options.initNewHeight.call() }); 

到:

$this.bind("initEventNewHeight", function() { options.initNewHeight.call($this, $this, 120) }); 
+0

也注意到登記處理程序,調用函數paramters,第一個是「本」上的「initNewHeight」回調,第二個和第三個是你的屬性。 –

+0

感謝...它的工作原理,這就是我要找的 – Tabes

0

有很多的問題與你的插件,我強烈建議你至少要閱讀this tutorial

Updated Fiddle請注意,我沒有固定的下方mentionned點,我只是做了它的工作像你預期

  1. 如果多個參數傳遞給trigger,你需要用它們在數組中。

    $this.trigger("initEventNewHeight", [$this, newHeight]); 
    
  2. 在一個jQuery對象原型函數(插件功能),this指向jQuery對象,而不是一個DOM節點。因此,var $this = $(this);不符合您的想法。另外,如果你的插件被調用的jQuery集封裝了多個DOM元素,那麼你的代碼的結構將會引發問題。

    你的插件功能應該是這樣的:

    return this.each(function { 
        /*apply plugin to 'this', which now is a DOM node*/ 
    }); 
    
  3. bind已過時,使用on

  4. 論點並不落在天空,我不明白你是否期望得到任何價值,因爲你沒有通過任何。

    $this.bind("initEventNewHeight", function(e, el, newHeight) { 
        //passing el is not necessary since the context will already be $this 
        options.initNewHeight.call($this, el, newHeight); 
    }); 
    
  5. 你應該考慮使用DOM元素本身作爲一個事件發射器,並充分利用jQuery的事件架構來發布你的事件,而不是依賴於回調函數像你一樣。

    //E.g. 
        var someEvent = $.Event('myCustomEvent'); 
        someEvent.someParam = 'some value'; 
    
        $(domElOfYourPlugin).trigger(someEvent); 
    

    現在,客戶可以像$(domElOfYourPlugin).on('myCustomEvent', ...)

+0

感謝您的幫助,哦,是的,當然,這只是我的插件的一個片段。我需要這個問題的幫助。謝謝 – Tabes

相關問題