jQuery 插件:如何从事件中访问?

Posted

技术标签:

【中文标题】jQuery 插件:如何从事件中访问?【英文标题】:jQuery Plugin: how to access from an event? 【发布时间】:2014-01-11 05:10:44 【问题描述】:

假设我有这个非常基本的插件:

(function ($) 

"use strict";

// Namespaced methods.
var methods = 
    init: function (options) 

        return this.each(function () 

            // Default settings.
            var defaults = 
                'sampleText': 'hello'
            ;

            var $this = $(this);
            var data = $this.data('me');

            // Continue if the plugin hasn't been initialized yet.
            if (!data) 

                $this.mouseup(function () 
                    $this.trigger('onClick'); // events.
                );

                // Add control data.
                $this.data('me', defaults);
                $this.trigger('onLoad'); // events.

            

        );

    ,

    isPlugin: function() 
        return true;
    ,

    getData: function() 
        return $(this).data('me');
    

$.fn.tester = function (method) 

    // Method calling logic.
    if (methods[method]) 
        return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
     else if (typeof method === 'object' || !method) 
        return methods.init.apply(this, arguments);
     else 
        $.error('Method ' + method + ' does not exist on jQuery.test');
    

;

)(jQuery);

然后我像这样应用插件并监控点击事件:

$('#poo').tester();
$('#poo').on('onClick', function (e) 
    var $data = e.target.tester('isPlugin');
    var dat = e.target.data('me');
);

问题是;在事件处理中,我无法再次访问该插件。试图在 Visual Studio 中获取这两个数据的结果告诉我

javascript 运行时错误:对象不支持属性或方法 '测试者'

还有……

JavaScript 运行时错误:对象不支持属性或方法 '数据'

访问不在事件内部的插件数据+方法工作正常。

【问题讨论】:

【参考方案1】:

试试这个:

var $data = $(e.target).tester('isPlugin');
var dat = $(e.target).data('me');

e.target 本身引用了一个 DOM 节点,您实际上需要一个正在使用您的插件的 jQuery 对象。

【讨论】:

谢谢查理——成功了。虽然它必须是一些简单的我错过了!

以上是关于jQuery 插件:如何从事件中访问?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jquery 从“更改”事件中访问父元素

如何将自定义事件添加到 jQuery 插件模式中

如何在 jQuery 自定义插件中正确添加多个元素事件

如何克隆 jQuery Listen 插件事件?

如何触发jQuery asual的地址插件的更改事件?

jquery dataTables - 如何在点击事件中提取行数据