将事件传递给 jQuery 插件

发布于 2024-12-25 21:01:51 字数 1014 浏览 0 评论 0原文

我刚刚开始为 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”吗?有更好的办法吗?

I just started writing Plugins for jQuery. I found a good tutorial how to start with it, but one point I missed. I want register a independent plugin-object for each element and I need them events.

Here the code I got atm:

(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);

Do I need to copy my public methods "onfocus" and "onblur" from "this" to "object"? Is there a better way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

海风掠过北极光 2025-01-01 21:01:51

编写 jQuery 插件的最佳指南可能是 jQuery 自己的

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

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

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

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

...以及您需要的任何其他内容。

The best guide for writing jQuery plugins is probably jQuery's own.

jQuery's event system is the best way of handling events for your plugin. If you're using jQuery 1.7+ (which I recommend, if it's possible), .on() and .off() are your workhorses. Not only can you bind browser events like focus and blur, you can create completely custom events like 'iamasuperstar' and trigger them manually with this.trigger( 'iamasuperstar' ).

So you'd do something like this for your plugin:

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

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

...and whatever else you need.

掌心的温暖 2025-01-01 21:01:51

为什么不:

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

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

Why not:

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

    object.onblur = function() {
        element.val('Blur');
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文