jQuery插件,取消绑定元素并重新运行插件

时间:2011-02-09 00:59:19

标签: jquery ajax xhtml

我正在制作一个简单的插件,可以在点击某些超链接时激活,例如:


// 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);

    return this.each(function() {


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

    });
 };
})(jQuery);

在某些情况下,我需要在ajax成功后重新运行插件(因此可能在ajax中使用类 mylink 返回的锚将与插件一起使用)。

但是,如果您只是在ajax回调中运行 jQuery('a.mylink')。c_podsystem(); ,它会重新运行以前绑定的页面上的项目,这会导致插件跑了两次。

所以为了解决这个问题,我需要通过返回this.each()取消绑定所有元素受影响的

然后重新运行 jQuery('a.mylink')。c_podsystem()以便它从新鲜的dom中使用类 mylink 激活页面上的所有锚点。 / p>

如何取消绑定以前受影响的元素,以便重新运行插件?

1 个答案:

答案 0 :(得分:1)

是否可以调整插件以使用.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

上的示例