我有这个jQuery函数,它通过滚动支持垂直居中元素:
$.fn.center = function () {
var self = this;
this.css("position", "absolute");
this.css("top", ($(window).height() - this.height()) / 2 + $(window).scrollTop() + "px");
$(document).on("scroll", function () {
self.center();
});
return this;
};
它与jQuery Block UI插件一起使用:
$('#cph')
.block(finalOptions)
.find('.blockUI.blockMsg')
.center();
每次需要阻止UI时,我都会执行第二个代码段。但是当我取消阻止UI时,我只是简单地使用Block UI API删除它,但我对滚动事件处理程序没有任何作用。如果我多次阻止/取消阻止UI,我会注册许多事件处理程序来滚动事件 - 我猜这很糟糕。但我不知道如何妥善解决这个问题。你能建议吗?
答案 0 :(得分:13)
使用jquery off
// assume you have a method for reuse purpose
function YourFunction(){
// do something
};
$(document).on("scroll", YourFunction);
$(document).off("scroll", YourFunction);
请注意,除非您想要分离所有事件处理程序,否则匿名函数在这种情况下不起作用:
$(document).off("scroll");
您还可以在“开启”和“关闭”事件时指定“命名空间”:
// delegate events under the ".validator" namespace
$(document).on("click.validator", function(){
// do something
});
// remove only event handlers in the ".validator" namespace
$("form").off(".validator");