2014-06-30 39 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

相关问题