Я пытаюсь сделать плагин jQuery для пользовательских флажков и переключателей.

(function($)
{
    $.fn.checkboxRadio = function(options)
    {
        var defaults = some;
        ...

        return this.each(function()
        {
            var button = $(this);
            ...
        });
    }
})(jQuery);

Теперь он может быть использован $('input').checkboxRadio(options);

Как добавить метод check без изменения текущей области, чтобы можно было использовать что-то вроде $('input').checkboxRadio('check')?

Как обработать пользовательский метод и получить его имя в моем плагине?

0
Mark 31 Янв 2013 в 01:49

2 ответа

Лучший ответ

Вот официальное руководство по плагину jquery.

Часть о функциях переноса находится здесь («Методы плагина») (пример потенциальный плагин всплывающей подсказки):

(function( $ ){
  var methods = {
    init : function(options) { ... },
    show : function() { ... },
    hide : function() { ... },
    update : function(content) { ... }
  };

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

[обновление] , объясняющее строку methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 )) в руководстве:

Если вы вызываете $(selector).tooltip('update', 'hello') из своего кода javascript, вы хотите в конечном итоге вызвать метод update, передав 'hello' в качестве аргумента content, а this установлен $(selector) на время разговора.

Вот о чем заботится эта линия:

  • если method == 'update', methods[method] является методом update,
  • arguments будет равен ['update', 'hello'], вам нужно отбросить первый элемент, чтобы получить аргументы, которые вы хотите передать своему методу; это именно то, что делает Array.prototype.slice.call(arguments, 1),
  • myFunc.apply(obj, argsArray) вызывает функцию myFunc, передавая argsArray в качестве аргументов и устанавливая this в obj на время вызова.

Таким образом, внутри ваших методов вы можете вызывать this.each(...) для перебора всех элементов селектора, например, :

update: function(content) {
  this.each(function(){ $(this).data('tooltip.content', content); });
  return this;
}
1
LeGEC 30 Янв 2013 в 22:49

Вы можете подключить методы плагина следующим образом:

(function($) {
    $.fn.checkboxRadio = function(options) {
        var defaults = {
            check: 'check'
    }

        return this.each(function() {
            var o = options;
            var _this = $(this);

            if( o.check === 'check' ) {
                 _this.attr('checked','checked');
            }else if ( o.check === 'uncheck' ) {
                 _this.removeAttr('checked');
            }
        });
    }
})(jQuery);

И пользовательский документ должен быть таким, как вы хотите: $('input').checkboxRadio({check:'check'});

0
Barlas Apaydin 30 Янв 2013 в 22:09