将事件传递给jQuery插件

时间:2012-01-09 15:10:13

标签: javascript jquery jquery-plugins

我刚开始为jQuery编写插件。我找到了一个很好的教程如何开始,但我错过了一点。我想为每个元素注册一个独立的插件对象,我需要它们。

这是我得到的代码:

(function($){
     var MyPlugin = function(pElement, pOptions)
     {
        var element = $(pElement);
        var object = pElement;
        var settings = $.extend({
           param: 'defaultValue'
        }, pOptions || {});

        this.onfocus = function() {
            element.val('Focus');
        };

        this.onblur = function() {
            element.val('Blur');
        }

        // DO I NEED THIS?
        object.onfocus = this.onfocus;
        object.onblur = this.onblur;
    };

    $.fn.myplugin = function(options)
    {
        return this.each(function()
        {
            var element = $(this);
            if (element.data('myplugin')) { return };
            var myplugin = new MyPlugin(this, options);
                element.data('myplugin', myplugin);

        });
    };
})(jQuery);

我是否需要将我的公共方法“onfocus”和“onblur”从“this”复制到“object”?还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

为什么不:

    object.onfocus = function() {
        element.val('Focus');
    };

    object.onblur = function() {
        element.val('Blur');
    }

答案 1 :(得分:1)

编写jQuery插件的最佳指南可能是jQuery's own

jQuery's event system是处理插件事件的最佳方式。如果你正在使用jQuery 1.7+(我推荐,如果可能的话),.on().off()是你的主力。您不仅可以绑定浏览器事件,例如焦点模糊,还可以创建完全自定义的事件,例如'iamasuperstar',并使用this.trigger( 'iamasuperstar' )手动触发它们。

所以你要为你的插件做这样的事情:

element.on( 'focus', function() {} )

element.on( 'blur', function() {} )

......以及你需要的任何其他东西。