【问题标题】:Custom event trigger on a jQuery plugin instancejQuery 插件实例上的自定义事件触发器
【发布时间】:2013-06-04 13:01:41
【问题描述】:

向 jQuery 插件添加自定义事件时遇到问题。

我制作了一个非常简单的 jQuery 插件,我从中触发了一个事件,但附加的处理程序无法正常触发:http://jsfiddle.net/FhqNf/2/

(function($) {

var my_plugin = function(link, opts) {

    var $this = this, img, o={};

    defaults = {
        color: 'rgb(255, 0, 0)'
    };

    $.extend(this, $.fn, {
        init : function () {
            o = $.extend(defaults, opts);
            link.on('click', $this.changeColor);
        },

        changeColor : function (e) {
            if( link.css('color') == o.color)
                link.css('color', 'blue');
            else 
                link.css('color', o.color);

            $this.triggerChange();
        },

        triggerChange : function () {
            $this.triggerHandler('custom', {test: 'ok', color: o.color} );
        }
    });

    this.init();

};

$.fn.my_plugin = function(opts) {
    return new my_plugin(this, opts);
};

然后,如果我使用我的插件并将一个函数附加到我的“自定义”事件处理程序,该事件不会触发:

var test1 = $('#test1').my_plugin();
test1.on('custom', function (data) { console.log(data); alert('test1') } );

编辑:一种解决方法是在“链接”dom 对象上附加/触发事件,但我想触发附加到我的插件实例的事件。这不可能吗?

提前致谢。

【问题讨论】:

  • 正确是什么意思?我看到它有效。
  • 不,“自定义”事件处理程序永远不会被解雇,我已经更新了我的问题

标签: jquery


【解决方案1】:

一些代码修改及其工作

在您的代码中,您在不同对象上触发事件并将处理程序附加到不同对象。

下面试试

 triggerChange : function () {

            link.trigger('custom', {test: 'ok'} );
        }


$.fn.my_plugin = function(opts) {
          new my_plugin(this, opts);
        return this;
    };

http://jsfiddle.net/FhqNf/3/

【讨论】:

  • 其实我不想在 DOM 对象上触发事件,而是在插件实例上触发,这不可能吗?
  • @Laurent:您可以将插件的引用存储在数据属性中。因此,如果事件在您的元素上触发,您可以轻松访问您的插件实例(请参阅github.com/acanimal/jQuery-Plugin-Boilerplate/blob/master/…)。
【解决方案2】:

您需要链接来触发自定义事件,然后让链接监听自定义事件。

您的插件没有返回 jQuery 对象,因此尝试将 .on 函数链接到 null 返回不会做任何事情。尝试使用链接 ID 或返回对象以保持函数链接正常工作。

我改成:

link.trigger('mycustomevent');
$("#test1").on('mycustomevent'....);

小提琴:http://jsfiddle.net/FhqNf/4/

【讨论】:

  • 其实我不想在 DOM 对象上触发事件,而是在插件实例上触发,这不可能吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
相关资源
最近更新 更多