为jquery插件实例创建唯一的ID?

时间:2013-01-26 02:14:27

标签: jquery jquery-plugins

我创建了一个jQuery插件,它可以监听窗口中的模糊事件。

我想在插件本身内部创建一个唯一的id,所以当我销毁插件的实例时,我可以off监听器。我该如何创建这些uniqueIds?

下面的示例显然不起作用 - destroy方法中的incrementId总是从上一个插件实例中删除模糊。

 (function( $ ) {

    var incrementId = 0;

    var methods = 
    {
        init : function( options ) {
            var that = this;
            incrementId += 1;
            $(window).on( "blur.pleaseKillMe" + incrementId, function( e ) {
                that.css( "color", "red" );
            });
        },

        destroy : function( ) {
            console.log( "and... " + incrementId );
            $(window).off( "blur.pleaseKillMe" + incrementId );
        }
    };

    $.fn.pleaseKillMe = function( method )
    {
        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.p5shrinkwrap' );
        }
    };

})( jQuery );

1 个答案:

答案 0 :(得分:1)

incrementId += 1;
this.data('id', incrementId);
...
$(window).off('blur.pleaseKillMe' + this.data('id');