Плагин jQuery, отсоедините элементы и перезапустите плагин - PullRequest
2 голосов
/ 09 февраля 2011

Я делаю простой плагин, который активируется при нажатии на определенные гиперссылки, например:


// actives the plugin for an anchor with class mylink
jQuery('a.mylink').c_podsystem();

// the plugin
(function($){

  $.fn.c_podsystem = function(opt) {  
    var opt = $.extend(opt);

    <b>return this.each(function() {


         jQuery(this).click(function(e){
              // do something
         }

    });</b>
 };
})(jQuery);

В некоторых случаях мне нужно перезапустить плагин после успешного выполнения AJAX (поэтому якоря, которые могут быть возвращеныв ajax с классом mylink будет работать с плагином).

Однако, если вы просто запустите jQuery ('a.mylink'). C_podsystem (); в обратном вызове ajax, он перезапустится для элементов, уже находящихся на ранее привязанной странице, что вызываетПлагин запускается дважды.

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

Затем просто перезапустите jQuery ('a.mylink '). c_podsystem () , поэтому он активирует все якоря на странице с классом mylink из новой версии.

Как отменить привязку ранее затронутых элементов,чтобы я мог просто перезапустить плагин?

1 Ответ

1 голос
/ 09 февраля 2011

Можно ли настроить ваш плагин для использования .live () ?

Прикрепите обработчик к событию для всех элементов, которые соответствуют текущему селектору, сейчас и в будущем.

Используя live, вы можете переделать свой плагин в следующее:

(function($) {

    $.fn.c_podsystem = function(opt) {
        var opt = $.extend(opt);
        jQuery(this).live("click", function(e) {
            $("#result").append($(this).text());
        });
    }
})(jQuery);

Привязать к существующему a.mylink

jQuery('a.mylink').c_podsystem();

Добавить новую ссылку на dom

$("#links").append($("<a>After Plugin Ran</a>").addClass("mylink"));

При использовании live обработчик события click будет по-прежнему функционироватькак задумано вашим плагином.

Пример jsfiddle

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