gpt4 book ai didi

javascript - jQuery 点击事件不会解除绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 09:21:11 26 4
gpt4 key购买 nike

我想在单击按钮时打开一个导航。当导航打开并且用户在导航外部单击时,我希望它关闭。我想很简单...

我尝试首先通过按钮上的单击事件来打开导航。然后我在文档上添加一个新的点击事件来触发 closeNav 方法。

到目前为止,一切都还好。有用。但我的点击事件堆积起来。每次打开导航时都会添加一个新文档单击事件。所以我添加了一个关闭点击来删除之前添加的点击事件。还尝试了解除绑定(bind),结果相同。

我猜这与处理程序有关,因为我使用 this.closeNav.bind(this),但我不知道...

有什么想法吗?

headerNavigation.prototype.init = function()
{
// Add on click event on the button that triggers toggleNavigation
$(this.navBtn).on('click', this.toggleNavigation.bind(this));
}

headerNavigation.prototype.toggleNavigation = function(e)
{
e.stopPropagation();
$(this.nav).slideToggle(200);
// Add an on click for document that triggers this.closeNav
$(document).on('click', this.closeNav.bind(this));
}

headerNavigation.prototype.closeNav = function(e)
{
console.log($(document).data('events'));
$(this.nav).slideUp(200);
// Now remove the on click event for document so we do not stack up on these
$(document).off('click', this.closeNav.bind(this));
}

最佳答案

每次调用 Bind 都会创建新函数。

试试这个:

headerNavigation.prototype.toggleNavigation = function(e)
{
e.stopPropagation();
$(this.nav).slideToggle(200);
// Add an on click for document that triggers this.closeNav
this._binder = this.closeNav.bind(this);
$(document).on('click', this._binder);
}

headerNavigation.prototype.closeNav = function(e)
{
console.log($(document).data('events'));
$(this.nav).slideUp(200);
// Now remove the on click event for document so we do not stack up on these
$(document).off('click', this._binder);
}

关于javascript - jQuery 点击事件不会解除绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31835575/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com