Javascript jQuery-如何调用方法/原型函数
我使用sticky侧边栏使侧边栏粘住:我还使用AJAX多次重新加载页面。过了一段时间,滚动延迟了,我想这是因为每次我重新加载内容时都没有破坏stickysidebar 在这里如何调用destroy函数 我试过了 $('.stickem').stickySidebar.destroy() 及 $('.stickem').stickySidebar(“销毁”) 但两者都不起作用。以下是原型: $.stickySidebar.prototype={ init:function(){ }, 粘性:函数(){ }, bind:function(){} 销毁:函数(){Javascript jQuery-如何调用方法/原型函数,javascript,jquery,sidebar,Javascript,Jquery,Sidebar,我使用sticky侧边栏使侧边栏粘住:我还使用AJAX多次重新加载页面。过了一段时间,滚动延迟了,我想这是因为每次我重新加载内容时都没有破坏stickysidebar 在这里如何调用destroy函数 我试过了 $('.stickem').stickySidebar.destroy() 及 $('.stickem').stickySidebar(“销毁”) 但两者都不起作用。以下是原型: $.stickySidebar.prototype={ init:function(){ }, 粘性:函数(
警报(“h”); this.element.unbind(“已销毁”,this.teardown); this.teardown();
}, 拆卸:函数(){ console.log('eee'); $.removeData(this.element[0],this.name); this.element.removeClass(this.name); 这个。解除绑定(); this.element=null;
}, 解除绑定:函数(){} }
这不是jQuery插件的工作方式。如果您想将其命名为
$('.stickem').stickySidebar(“销毁”)代码>(这是推荐的方法),请执行以下操作:
$.fn.stickySidebar = function(action) {
if (action === 'destroy') {
...
}
};
请参见尝试此var sidebar=$('.stickem').stickySidebar()
然后尝试sidebar.destroy()
谢谢Max,但它返回“未定义的不是函数”谢谢!但是在插件代码()中,他们首先像您一样将其作为一个函数编写,但随后所有其他函数都在一个“原型”中,我不知道如何访问。。我对重写整个插件不感兴趣,只是需要一种方法,在我重新加载页面/内容时销毁它/与之相关的所有内存。令人困惑的是,该链接有两个同名函数:$.fn.stickySidebar
和$.stickySidebar
<代码>$。第28行调用stickySidebar
,作为构造函数(即使用new
)。这意味着$.stickySidebar.prototype的所有元素都将成为这样构造的所有对象的元素,例如第46行和第60行的This
和第70行的self
。因此,这些行调用方法init
、initValues
和stickness
,它们在$.stickySidebar.prototype
中定义。大卫,谢谢你的回复!非常感谢。我读了这篇文章,但仍然不确定如何调用destroy函数。如果我像这样运行构造函数:$('.sticky').stickySidebar();我如何在原型中调用函数,或者是否有其他方法删除与插件相关的所有数据?我也尝试了removeData(),但一直出现“undefined function”错误。tiaLine 66在每次运行脚本时将处理程序绑定到窗口
对象。如果window
是一个持久对象,这意味着它会添加越来越多的处理程序,并且每次调整大小或滚动时都会运行这些处理程序。没有
destroy功能,作者对此没有做任何处理。我能看到的最佳修复方法是在调用$('.stickem').stickySidebar()之前运行$(window).off('resize.stickySidebar scroll.stickySidebar')
;这将删除在上一页加载期间设置的处理程序。(我还没有测试过这个。)这很有效。非常感谢David Knipe,感谢你的帮助和耐心,感谢你几天来一直坚持我的问题。你的帮助比我能给你的分数要多得多。再次感谢。
//code
$.fn.stickySidebar = function(action) {
if (action === 'destroy') {
...
}
};