Javascript 在jQuery中启用和禁用鼠标单击事件

Javascript 在jQuery中启用和禁用鼠标单击事件,javascript,jquery,Javascript,Jquery,我需要在单击特定元素后禁用鼠标单击事件,这已经准备好了,但是现在我需要在几秒钟后启用它,或者专门使用Mouseleave事件启用它。我已经做了这个例子,但它不起作用,为什么会发生这种情况 $(函数(){ var i=0; //单击元素 $('#data')。在('click',this,function()上{ i++; $('#count').html(i); //禁用单击 $(“#数据”).off('click'); //过了一会儿,我们再次启用单击 setTimeout(函数(){ $(

我需要在单击特定元素后禁用鼠标单击事件,这已经准备好了,但是现在我需要在几秒钟后启用它,或者专门使用Mouseleave事件启用它。我已经做了这个例子,但它不起作用,为什么会发生这种情况

$(函数(){
var i=0;
//单击元素
$('#data')。在('click',this,function()上{
i++;
$('#count').html(i);
//禁用单击
$(“#数据”).off('click');
//过了一会儿,我们再次启用单击
setTimeout(函数(){
$(“#数据”)。在('click');
}, 2000);
});
//或者在制作鼠标时启用单击
$('#data')。在('mouseleave',this,function()上{
$(“#数据”)。在('click');
});
});


您好
您是否尝试禁用该属性?如果您正试图禁用和启用

如果要使用onClick,则必须将onClick操作包装在单独的函数中,并将函数绑定到该函数

$(函数(){
var i=0;
//单击元素
$('#data')。在('click',this,function()上{
i++;
$('#count').html(i);
//禁用单击
$('#data').attr('disabled','disabled');
//过了一会儿,我们再次启用单击
setTimeout(函数(){
$(“#数据”).removeAttr('disabled');
}, 2000);
});
//或者在制作鼠标时启用单击
$('#data')。在('mouseleave',this,function()上{
$(“#数据”).removeAttr('disabled');
});

});所以有两件事,您需要防止单击时发生默认事件,并在需要时触发单击。这看起来像这样(未在浏览器中测试,因此可能不是100%)


您需要弄清楚的是如何防止重复调用事件。比如,超时开火然后他们离开。处理的方法可能是将
i
值发送到triggerClick,如果当前
i
高于传入的值,或者如果它已被激发,则不激发(因此,您必须保留该值的内部状态映射,以了解激发的内容)最简单的方法是:从
div
更改为
按钮
并使用
禁用

为什么不是一个
div

禁用属性
在这种情况下不会有任何区别

禁用的
将无法单击,因此只需等待时间过去,然后使用
设置超时()
的想法再次启用它

mouseleave
如果使用
disabled
的想法将不起作用,因为禁用的按钮将其
鼠标事件设置为none(至少在Chrome中是如此),因此它无法识别
鼠标指针
mouseleave

$(函数(){
var i=0;
$('#data')。在('click',this,function()上{
i++;
$('#count').html(i);
$(“#数据”).prop('disabled',true);
setTimeout(函数(){
$(“#数据”).prop('disabled',false);
console.log(“#数据可再次单击”);
}, 1000);
});
});
#数据{
利润率:8px;
填充:6px;
}


您好
。关闭
将完全删除事件。如果需要将其取回,则必须重新分配该函数。你不能禁用按钮吗?如果我可以用禁用按钮来禁用它,但我想看看为什么它不能用setTimeout或mouseleave来工作,如果我用on clcik再次激活它,这是再次激活它的正确方法,还是有其他方法?
$(function(){
  var i = 0;

    function triggerClick(selector) {
      return function() {
        $(selector).trigger("click")
      }
    }

  $('#data').on('click', this, function(event){
    // stop the click
    event.preventDefault();

    i ++;
    $('#count').html(i);

    setTimeout(triggerClick('#data'), 2000);
  });

    // Or enable the click when we make a leavemouse
  $('#data').on('mouseleave', this, triggerClick('#data'));
});