我从插件中抛出一个事件有点问题。我的插件正在举办一个名为“initNewHeight'这工作正常。现在我想将插件中更改的值发送到称为此插件的函数whitch ...
像这样: (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/
答案 0 :(得分:1)
尝试改变,这:
$this.bind("initEventNewHeight", function() { options.initNewHeight.call() });
为:
$this.bind("initEventNewHeight", function() { options.initNewHeight.call($this, $this, 120) });
答案 1 :(得分:0)
您的插件存在很多问题,我强烈建议您至少阅读this tutorial。
Updated Fiddle 请注意,我没有修复下面提到的分数,我只是让它按预期工作
如果将多个参数传递给trigger
,则需要将它们包装在一个数组中。
$this.trigger("initEventNewHeight", [$this, newHeight]);
在jQuery对象原型函数(您的插件函数)中,this
指向jQuery对象,而不是DOM节点。因此,var $this = $(this);
没有按照您的想法执行。此外,如果调用插件的jQuery集合封装了多个DOM元素,那么代码的结构化方式将导致问题。
您的插件功能应如下所示:
return this.each(function {
/*apply plugin to 'this', which now is a DOM node*/
});
bind
已弃用,请使用on
。
争吵不会落在天空中,因为你没有通过,所以我看不出你期望得到什么价值。
$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);
});
您应该考虑将DOM元素本身用作事件发射器,并利用jQuery事件架构来发布事件,而不是像您一样依赖回调函数。
//E.g.
var someEvent = $.Event('myCustomEvent');
someEvent.someParam = 'some value';
$(domElOfYourPlugin).trigger(someEvent);
现在,客户可以注册$(domElOfYourPlugin).on('myCustomEvent', ...)