【问题标题】:How to unbind click event for anchor tag如何取消绑定锚标记的点击事件
【发布时间】:2020-10-04 14:49:12
【问题描述】:

尝试使用以下代码在一定时间后解除对锚标记的点击。

 $('a').click((e)=>{
        x = e.target;
        e.preventDefault();
        setTimeout(function(){ 
            unBind(x) }, 500);
});

unBind=(x)=>{
    $(x).unbind('click').click();
}

但这不起作用。解除绑定似乎没有发生。但如果我改用类选择器,代码确实可以工作。

$('.className').click((e)=>{
        e.preventDefault();
         setTimeout(function(e){ 
                $('.className').unbind("click").click();
            }, 500);
    })

有人可以帮我解决锚标记的问题吗?谢谢!

编辑:更新了从 setTimeout 中删除 $(this) 的代码

【问题讨论】:

  • 也许您没有准备好文件? stackoverflow.com/a/11227766/2275490
  • 制作minimal reproducible example 这样我们就可以看到自己在什么情况下a 选择器不起作用而第一类起作用...
  • this 不会是 setTimeout 中的链接,并且由于=>,它也不会是点击处理程序中的链接 - 在您的 setTimeout 中,添加console.log(this) 可能是window
  • 您的用例有点困惑:您希望允许点击(尽可能多的用户可以点击)0.5 秒,然后禁用所有点击但运行最后一个(不会作为点击运行)关闭)?有点奇怪的TBH。如果您想要单击,请改用.one("click", ...,它会在......好吧......发生一个事件后自动关闭
  • @freedomn-m 用例是我需要在锚点点击时设置一些数据层变量,一旦设置了变量,它需要解除绑定并重定向到用户点击的 href。

标签: javascript jquery


【解决方案1】:

我尝试复制您所描述的 HTML,并从第一部分复制了您的 MRE,添加了控制台日志记录(随机性作为每次调用的标识),它似乎有效。

 $('a').click((e)=>{
       x = e.target;
       e.preventDefault();
       console.log("click " + Math.random());
       setTimeout(function(){ 
            unBind(x) }, 500);
});

unBind=(x)=>{
    console.log("unbind " + Math.random());
    $(x).unbind('click').click();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a class="className" href="#f">f</a>

【讨论】:

  • 解除绑定有效,但没有模拟点击。需要点击链接两次。
  • 你是说要在点击解绑之前必须点击链接两次?
【解决方案2】:

尝试了一些解决方法,下面是我找到的解决方案。

 $('a').click((e)=>{        
            e.preventDefault();
            setTimeout(()=>{window.location.href = $(e.target).attr("href");},500);
    
    }); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    相关资源
    最近更新 更多