Как иметь несколько экземпляров плагина jQuery на единственной странице?

Я думаю, что Вы неправильно понимаете OpenID, процесс регистрации и OpenID является ответственностью пользователя, Вы отметите, что нет никакого места для подписываний здесь без OpenID.

17
задан James Skidmore 7 February 2011 в 06:08
поделиться

3 ответа

Я не совсем понимаю, что вы имеете в виду, говоря о наличии более одного экземпляра плагина. Плагин будет доступен для использования с любым элементом.

Этот комментарий ничего не проясняет для меня:

Итак, скажем, что это плагин, который взял параметр "цвет" и повернул объект в этот цвет. Ну в том если вам понадобится несколько экземпляров, как вы имеете дело с более чем одной страницей элемент, меняющий более одного цвета.

В этом случае вы должны передать аргументы разных цветов по мере необходимости:

$('div#foo').makeColor('red');
$('div#bar').makeColor('blue');

Каждый раз, когда вы вызываете плагин, он будет использовать любые аргументы, которые вы ему дадите. Плагин - это не класс, которому нужны экземпляры.

2
ответ дан 30 November 2019 в 13:40
поделиться

To answer your question directly, you can use jQuery.noconflict() to avoid namespace collisions and thus potentially have multiple instantiations on a page..

var $j = jQuery.noConflict();
// Use jQuery via $j(...)
$j(document).ready(function() {
  // etc

check here

But I question your design. Why are you writing a plugin that appears to not operate on a jQuery wrapped set ? .. Plugins should be written to assume they are operating on a jQuery array held in 'this'. In which case any state can be stored in each of the items being acted upon... But maybe you are building something different?

Please review this page

1
ответ дан 30 November 2019 в 13:40
поделиться

У меня была та же проблема: как использовать несколько экземпляров плагина только в одной форме? Обычный способ не работает, потому что на самом деле экземпляр не является экземпляром плагина: это экземпляр jQuery.Таким образом, если для управления плагином определено более одного элемента, каждое определение имеет приоритет над предыдущими параметрами.

Необходимо было взглянуть на проблему с другой стороны.

Плагин обычно создается так, чтобы реагировать на конкретное событие для определенного элемента. например, при нажатии кнопки или при наведении указателя мыши на элемент. В моем случае мне пришлось использовать плагин автозаполнения для поля города, но моя форма имеет 5 вкладок и в общей сложности 4 поля для городов для 4 различных частей собираемой информации. Для каждого поля параметры специфичны.

Между прочим, я понял, что мне не нужно, чтобы плагин был активен каждый раз: достаточно просто при соответствующем событии в поле.

Итак, у меня возникла идея: менеджер событий для каждого элемента. Когда событие добавляется, я определяю действие плагина. Некоторый код будет более эффективным для объяснения: представьте, что у вас есть 3 блока div, и ваш плагин должен изменить цвета, но с конкретными цветами в зависимости от того, какой div затронут.


$(document).ready(function(){
    // Wich elements are affected by the plugin
    var ids = ['myDiv1','myDiv2','myDiv3'];
    // foe each one :
    for (v in ids) 
    {
        //define from an event :
        $('#'+ ids[v]).focus(function()
        {
            // depending which id is active :
            var  aParams, idDiv = $(this).attr('id');
            // Choosing the right params
            switch(idDiv)
            {
                case 'myDiv1':
                    aParams = {'color': '#660000', 'background-color': '#0000ff'};
                    break;
                case 'myDiv2':
                    aParams = {'color': '#006600', 'background-color': '#ff00ff'};
                    break;
                case 'myDiv3':
                    aParams = {'color': '#000066', 'background-color': '#ff0000'};
                    break;
                default:
                    aParams = {'color': '#000000', 'background-color': '#ffffff'};
            };
            // Defining the plugin on the right element with the right params
            $(this).myPlugin(
            {
                colors: aParams
            });
        });
    }
});

И это прекрасно работает.

Извините, если мой английский не идеален - надеюсь, вы хорошо понимаете.

-4
ответ дан 30 November 2019 в 13:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: