解锁并在点击中重新绑定一个函数是否正确?

时间:2011-12-20 05:05:01

标签: jquery function binding click

如果我有一个在click事件中执行某项操作的函数,取消绑定该函数然后重新绑定是否正确?

目前我有一个单击按钮时弹出的功能。它会调整大小和一切,但它在函数内运行良好。我现在的问题是,当我.hide()这个弹出窗口时,如果我尝试调整浏览器的大小,这个函数仍然是活动的(我没有在浏览器调整大小时分配这个弹出窗口)。现在我应该在点击它时取消绑定此功能吗?

由于

我的代码

function popup() {

$(window).resize(function () {  
var maskHeight = $(window).height();  
var maskWidth = $(window).width();
var dialogTop =  (maskHeight  - $('#dialog-box').height())/3;  
var dialogLeft = (maskWidth - $('#dialog-box').width())/2; 
$('#dialog-overlay').css({ height:$(document).height(), width:$(document).width() }).show();
$('#dialog-box').css({ top: dialogTop, left: dialogLeft, position:"fixed"}).show();
}).resize();

$('#dialog-message').html(message);

};

$('#register').click(function(){
popup();
$('html').unbind(popup);    
return false;
});

甚至不确定解除绑定是否正确。但是当我尝试它时似乎没有用。

2 个答案:

答案 0 :(得分:0)

一旦不再需要事件处理程序,取消绑定可能是一个好主意。如果它们没有负面影响,您可以选择不解除绑定。但是,如果你觉得他们放慢脚本的速度,那么取消绑定它们是一个非常好的主意,因为它们不再需要它们。

也可以在执行任何代码之前检查事件处理程序中的标志,而不是取消绑定。

答案 1 :(得分:0)

是和否。 如果您正在使用$.bind,则可以根据需要轻松绑定和取消绑定事件。

如果您正在使用某种形式的事件委派,则维护包含状态的对象可能更容易。

state = {
    my_event: false
}

然后在click事件中:

if (!state.my_event)
{
    do_something();
}