Плагин Jquery / Установка интервала и проблема с областью - PullRequest
0 голосов
/ 24 августа 2011

Я пытаюсь написать простой плагин JQuery для следующего: мне нужно передать один элемент, например, $ ("div"). ApplyPlugin (); и затем он проходит через каждый из селекторов, которые я передал, и устанавливает интервал, который является локальным для данного экземпляра div, а затем очищает его через некоторое время. Я пытаюсь написать плагин, чтобы помочь в достижении этой цели, но, похоже, есть проблема с областью видимости, и я не совсем уверен, что происходит.

Опять же, мне нужно настроить таймер на div и иметь возможность использовать его 10 раз на странице. Все div'ы по сути будут иметь свои собственные «таймеры», поэтому, когда вы повторно наведите курсор мыши на div, он очистит этот таймер сам по себе. Выключение мыши, перезапуск таймера и т. Д.

Я не уверен, должно ли это быть выполнено с использованием внутренних методов для плагина, или есть лучший / более простой способ сделать это.

Вот где я сейчас нахожусь «

(function( $ ){

var methods = {
    init : function( options ) { 
        /* init method */
        return setInterval( $(this).boxit('update'),5000);  
    },
    show : function( ) {    },
    hide : function( ) {  },
    update : function( content ) { 
        /* update method */
        console.log("ping");
    }
};

$.fn.boxit = 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.tooltip' );
    }           
};

})( jQuery );

1 Ответ

0 голосов
/ 24 августа 2011

Я мог бы пойти в совершенно неправильном направлении, так что простите, если это не то, что вы хотите, но вы можете передать ссылку на объект jQuery в качестве параметра.

(function( $ ){

var methods = {
    init : function( jqObject, options ) { 
        /* init method */
        return setInterval( jqObject.boxit('update'),5000);  
    },
    show : function( ) {    },
    hide : function( ) {  },
    update : function( content ) { 
        /* update method */
        console.log("ping");
    }
};

$.fn.boxit = function( method ) {
    var args = Array.prototype.slice.call( arguments, 0 );
    args.splice(0, 0, $(this));

    // Method calling logic
    if ( methods[method] ) {
        return methods[ method ].apply( this, args.slice( 1 ));
    } else if ( typeof method === 'object' || ! method ) {
        return methods.init.apply( this, args );
    } else {
        $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
    }           
};

})( jQuery );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...