2013-02-08 2 views
0


Например, у меня есть JQuery плагин, и я вызвать метод инициализации с некоторыми atrributes, как это:Как изменить атрибут JQuery плагина

jQuery(document).ready(function($) { 
    $('#someid').somePlugin({ 
          animation : 'fadeIn', 
          speed : '1000', 
          easing : 'swing' 
         }); 
}); 

Давайте представим, что у меня есть также HTML ссылка на страницу. Возможно ли каким-либо образом изменить значения атрибутов этой функции инициализации плагина, нажав, например, на ссылку html?
Итак, щелкнув по ссылке, я хочу изменить, например, атрибут скорости без обновления страницы. Если это возможно, каков наилучший способ реализовать это действие?

Возможно, мне сначала нужно что-то изменить в коде моего плагина. код писать софт:

(function($) { 
    $.fn.extend({ 
     somePlugin: function(options) { 

      var defaults = { 
       speed : 500, 
       animation : 'fadeIn', 
       easing : false 
      } 

      var options = $.extend(defaults, options); 
      var speed = options.speed; 
      var easing = options.easing; 
      var animation = options.animation; 

      return this.each(function() { 
       var obj = $(this); 
       //some action here 
      }); 
     } 
    }); 
})(jQuery); 
+1

Это зависит полностью от того, как написан плагин! Передача нового объекта или просто передача строк, как и в случае с jQuery UI и т. Д., Не работает, если плагин не поддерживает его. – adeneo

+0

@adeneo, вы должны опубликовать это как ответ, так как остальные неполные или просто неверные. – Sparky

ответ

-1

Да, вы можете сделать это следующим образом:

$('#someid').somePlugin('option', 'animation', 5000); 

Кроме того, вы можете изменить несколько параметров одновременно с помощью:

$('#someid').somePlugin('option', {animation: 5000, otherOption: 'blah'}); 

Я должен упомянуть, это только работает для определенных, если вы используете «официальные» плагины jQuery. Многие авторы плагинов придерживаются этого шаблона проектирования, но не все это делают. Кроме того, если вы разрабатываете плагин с использованием jQuery UI Widget Factory, вы получаете эту функцию бесплатно.


EDIT: Поскольку ОП авторинга свой собственный плагин, мы можем показать пример того, как облегчить эту функциональность с помощью пользовательского плагина. Взято непосредственно с jQuery plugin authoring page:

(function($){ 
    var methods = { 
    init : function(options) { 
     //Extend options here with your 
     //defaults and init your plugin 
    }, 
    option: function(key, value){ 
     options[key] = value; 
    } 
    }; 

    $.fn.somePlugin = 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 { 
     //some error that method doesnt exist 
    }  

    }; 

})(jQuery); 

$('div').somePlugin({someOption: true}); 
//..later 
$('div').somePlugin('option', 'someOption', false); 
+0

** ** ** «... только работает ** наверняка **, если вы используете« ** official ** »jQuery plugins« _ ~ «Официальный» плагин jQuery? [Нет такой вещи] (http://docs.jquery.com/Plugins/Authoring). Плагин [jQuery Validate, написанный Jörn Zaefferer, членом групп разработчиков jQuery и jQueryUI] (http://bassistance.de/jquery-plugins/jquery-plugin-validation/), даже не обладает такой способностью: http : //jsfiddle.net/Lqpjy/ – Sparky

+0

Я полагаю, что я должен был использовать официальные плагины «jQuery UI»? Лучше? Просто потому, что кто-то является членом команды jQuuery dev, и они создают плагин, не означает, что плагин является «официальным». Это плагины, официально поддерживаемые и документированные командой jQuery UI: http://api.jqueryui.com/category/widgets/. – joeltine

+0

Да, согласен, если не существует какого-либо процесса сертификации, нет ничего, что бы делало плагин «официальным». Поскольку вопрос не связан конкретно с jQueryUI или упоминает jQueryUI, ваш вопрос спорный. – Sparky

Смежные вопросы