Javascript 触发后禁用功能调用5秒

Javascript 触发后禁用功能调用5秒,javascript,jquery,Javascript,Jquery,我有一个按钮,当有一个函数“active”时,我想禁止再向jquery发送调用 发生的情况是,每次用户点击按钮,计数器就会减少1。 但是这种情况会延迟,请参见此处的步骤 点击按钮 按钮被禁用 5秒后,计数器将减少,一个按钮更改为enabled(已启用) 然而,现在的问题是,即使按钮应该被禁用,用户也可以只点击X次,而计数器在5秒后会随着X次次数的减少而减少 这意味着电话仍能接通 请看我到目前为止试图做的事情,但不幸的是没有成功 $( document ).ready(function() {

我有一个按钮,当有一个函数“active”时,我想禁止再向jquery发送调用

发生的情况是,每次用户点击按钮,计数器就会减少1。 但是这种情况会延迟,请参见此处的步骤

  • 点击按钮
  • 按钮被禁用
  • 5秒后,计数器将减少,一个按钮更改为enabled(已启用)
然而,现在的问题是,即使按钮应该被禁用,用户也可以只点击X次,而计数器在5秒后会随着X次次数的减少而减少

这意味着电话仍能接通

请看我到目前为止试图做的事情,但不幸的是没有成功

$( document ).ready(function() {

    var enabled=true;

    $(".myButton").click(function(){

        if(enabled = true) {

        setTimeout(function(){
            var i = document.getElementById('counter2');
            i.innerHTML = parseInt(i.innerHTML)-1;
            $('.progress-bar').css("width", '+=' + '35px');
            $(".myButton").attr('disabled','enabled');
            $('.myButton').css('opacity', '1');
            var enabled=true;
        },5000)
        $(".myButton").attr('disabled','disabled');
        $('.myButton').css('opacity', '0.5');
        var enabled=false;

        } else { }

    });
});
你的意思是在这里写
==
。或者更好:
if(enabled)
as
enabled
无论如何都是一个布尔值

在这里使用
=true
也是一项任务。当
true
为真时,条件将始终计算为
true

你的意思是在这里写
==
。或者更好:
if(enabled)
as
enabled
无论如何都是一个布尔值


在这里使用
=true
也是一项任务。由于
true
是真实的,因此条件将始终计算为
true

,我认为您不需要跟踪变量来监视按钮的状态,因为您已经设置了一个属性来指示它已被禁用。因此,您可以使用该属性作为其状态的指示器

此外,您在类
myButton
的所有按钮上都执行此行为。因此,我将处理程序隔离为只单击了按钮的
event.target

$(".myButton")
    .prop('disabled',false)
    .click(function(event){
       // get the button that was clicked.
       var btn = $(event.target);
       if(btn.prop('disabled') === true) {
             // it's already disabled, nothing to do
             return;
       }

       // start a 5 second timer
       setTimeout(function(){
           var i = document.getElementById('counter2');
           i.innerHTML = parseInt(i.innerHTML)-1;
           //$('.progress-bar').css("width", '+=' + '35px');
           // I've never seen += used like this ^^^ does it work?
           var bar = $('.progress-bar');
           bar.css("width", (bar.width() + 35) + 'px');

           // after 5 seconds enable the button
           btn.prop('disabled',false);
           btn.css('opacity', '1');
        },5000);

        // disable the button until timer expires.
        btn.prop('disabled',true);
        btn.css('opacity', '0.5');
    });

我认为您不需要跟踪变量来监视按钮的状态,因为您已经设置了一个属性来指示它已被禁用。因此,您可以使用该属性作为其状态的指示器

此外,您在类
myButton
的所有按钮上都执行此行为。因此,我将处理程序隔离为只单击了按钮的
event.target

$(".myButton")
    .prop('disabled',false)
    .click(function(event){
       // get the button that was clicked.
       var btn = $(event.target);
       if(btn.prop('disabled') === true) {
             // it's already disabled, nothing to do
             return;
       }

       // start a 5 second timer
       setTimeout(function(){
           var i = document.getElementById('counter2');
           i.innerHTML = parseInt(i.innerHTML)-1;
           //$('.progress-bar').css("width", '+=' + '35px');
           // I've never seen += used like this ^^^ does it work?
           var bar = $('.progress-bar');
           bar.css("width", (bar.width() + 35) + 'px');

           // after 5 seconds enable the button
           btn.prop('disabled',false);
           btn.css('opacity', '1');
        },5000);

        // disable the button until timer expires.
        btn.prop('disabled',true);
        btn.css('opacity', '0.5');
    });

我想你真的很接近了,试着从第2行的第一个声明中删除
var
,在新的函数作用域中定义同名的新变量(
单击
设置超时
回调)刚刚尝试过,但没有成功:(它继续这样做(将点击次数相加并将所有点击次数的倒数减少)如果启用=真?…在继续之前只需说reading@Tsalikidis如果(variable=true)在javascript中总是正确的,我不明白你在说什么。(我想至少…)我想你真的很接近了,试着从第2行的第一个声明中删除
var
,在新的函数作用域中定义同名的新变量(
单击
设置超时
回调)刚刚尝试过,但没有成功:(它继续这样做(将点击次数相加并将所有点击次数的倒数减少)如果启用=真?…在继续之前只需说reading@Tsalikidis如果(variable=true)在javascript中总是正确的,我不明白你在说什么。(我想至少…)是的,这是一个问题,超时后分号丢失。是的,这是一个问题,超时后分号丢失。