2012-11-14 252 views
2

可能重复:
check window open有没有办法删除window.open事件?

我使用jQuery取决于某些选项来改变window.open事件的网址:

$(".class").click(function() { 
    window.open("http://www.url.com/" + variable); 
}); 

的问题是每次它改变时,我必须再次调用这个点击函数,并且旧的window.open事件仍然会被记住,并打开两个窗口,然后3,然后4等。

我已经尝试了很多解决方法,没有任何工作。我试着只调用一次click函数,然后改变变量,但window.open只会记住原始变量。

有没有办法在添加新的点击事件处理程序之前删除旧的点击事件处理程序?

+3

'window.open'不是事件 – Phil

+0

您不需要再次调用它,只需更改'variable'。 –

回答

0

添加新click处理程序之前,您可以删除旧的一个(或多个):

$(".class").unbind('click'); 
+0

哇,我以为我曾尝试解除绑定点击,但我想不是因为它有效。感谢您的快速和现实的答案! – Chris

0

改变变量的原因不起作用是因为变量作用域:匿名函数继承了原始上下文的范围,不管从那时起发生了什么。你有两个可能的答案:

坏:使用全局变量(window.variable)代替。

好:设置window.open函数的变量本身:

WindowOpener = $(".class").click(function() { 
    window.open("http://www.url.com/" + variable); 
}); 

然后

WindowOpener.unbind(); 

每当你需要清除先前的事件。 Jamey Sharp的回答也是正确的,并且可能会在你的情况下工作,除非你在绑定元素上做了一些不寻常的事情。

相关问题