2

可能重复:
检查窗口打开

我正在使用 JQuery 根据某些选择来更改 window.open 事件的 URL:

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

问题是每次更改时,我都必须再次调用此单击函数,并且仍然记得旧的 window.open 事件,并且打开了两个窗口,然后是 3,然后是 4,依此类推。

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

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

4

3 回答 3

1

更改变量不起作用的原因是变量范围:匿名函数继承其原始上下文的范围,无论此后发生了什么。你有两个可能的答案:

不好:改用全局变量 ( window.variable)。

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

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

接着

WindowOpener.unbind();

随时清除先前的事件。Jamey Sharp 的回答也是正确的,除非您对绑定元素做一些不寻常的事情,否则可能会在您的场景中工作。

于 2012-11-14T00:11:32.067 回答
0

看看 $.unbind -- http://api.jquery.com/unbind/。你可以用它来删除你的旧事件

于 2012-11-14T00:10:24.323 回答
0

在添加新的click处理程序之前,您可以删除旧的处理程序:

$(".class").unbind('click');
于 2012-11-14T00:11:01.583 回答