我正在制作一个简单的插件,可以在点击某些超链接时激活,例如:
// 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>
如何取消绑定以前受影响的元素,以便重新运行插件?
答案 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事件处理程序仍将按照插件的预期运行。
上的示例