gpt4 book ai didi

jquery rebind() 在特定时间禁用事件,然后重新绑定(bind)它们

转载 作者:行者123 更新时间:2023-12-01 08:10:56 25 4
gpt4 key购买 nike

单击按钮后,我的脚本会加载新内容。只要它正在加载,我就不希望元素列表可点击。

是否有任何方法可以解除这些元素的点击事件的绑定(bind),加载内容,然后正确“重新绑定(bind)”事件?

我想要防止的是每个点击功能/元素内的 if 语句。

这是我尝试过的:

$(load_button).click(function(){
$('a').each(function(){
var dis_e = $(this).data('events');
$(this).data('disabled-events', dis_e);
}).unbind('click');

$(some_content).load(function(){
$('a').each(function(){
var dis_e = $(this).data('disabled-events');
$(this).removeData('disabled-events');
$(this).bind('click', dis_e);
});
});
});

更新:

它还应该防止元素(在本例中)警告“点击”:

$('a').click(function(){
alert('click');
});

最佳答案

您可以临时将新的点击事件与元素的特定命名空间绑定(bind),这将阻止点击事件传播,并且在加载内容时取消绑定(bind)事件。

$("a").bind("click.disabled", function(e) {
e.stopImmediatePropagation();
return false;
});

稍后:

$("a").unbind("click.disabled");

编辑:正如 Yoshi 所指出的,这期望您的点击事件处理程序在自定义事件之前附加到元素。所以我可以看到两种解决方法:

  1. 您可以在创建元素时始终将此事件处理程序绑定(bind)到每个元素,以便始终在自定义点击事件处理程序之前调用它们。当您加载数据时,您只需执行 stopImmediatePropagation()return false
  2. 或者你检查这个other question这样您的新事件处理程序就会位于列表中的第一个。

如果您选择第一种方法,您的事件将如下所示:

var clicDisabled = false;
$("a").bind("click.disabled", function(e) {
if (true == clicDisabled) {
e.stopImmediatePropagation();
return false;
}
});

然后在加载内容时将变量 clicDisabled 暂时设置为 true。

关于jquery rebind() 在特定时间禁用事件,然后重新绑定(bind)它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13729681/

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