Javascript 点击按钮不执行功能

Javascript 点击按钮不执行功能,javascript,html,Javascript,Html,我试着点击btn3(kashef),但它并没有触发我的功能 卡舍夫() 我的代码在这里: 我需要通过点击按钮kashef,我的运行计数器(它是一个 货币计数器)将减去300美元(点击成本) 获取该功能)例如:如果货币滚轴上的金额为1000美元 点击“kashef”按钮事件的瞬间,货币计数器减少 设置为700美元并继续运行,直到下一次单击 代码如下: let start; const el = document.getElementById('count');

我试着点击btn3(kashef),但它并没有触发我的功能 卡舍夫()

我的代码在这里:

  • 我需要通过点击按钮kashef,我的运行计数器(它是一个 货币计数器)将减去300美元(点击成本) 获取该功能)例如:如果货币滚轴上的金额为1000美元 点击“kashef”按钮事件的瞬间,货币计数器减少 设置为700美元并继续运行,直到下一次单击

  • 代码如下:

    
        let start; 
        const el = document.getElementById('count');  
        const final = parseInt(el.textContent, 10);  
        const duration = 100000;  
        
        const kashefButton= document.getElementById("btn3");
        kashefButton.addEventListener("click", kashef);
        
        function kashef(){
        
        document.getElementById('count').innerHTML=1000-300;
        
        }
         
        
        const step = ts => {
          if (!start) {
            start = ts;
          }
           
          let progress = (ts - start) / duration;
          el.textContent = Math.floor(progress * final) * 100 ; 
          time = +el.textContent;
          if( progress < 1){
            requestAnimationFrame(step);
          }
        
          var btn1 = document.getElementById('btn1');
          var btn2 = document.getElementById('btn2');
          var btn3 = document.getElementById('btn3'); 
        
          const OpentButtons = 200;
        
        
          if (time <= OpentButtons) {
            btn1.disabled = true;
            btn2.disabled = true;
            btn3.disabled = true;
        
          } else {
            btn1.disabled = false;
            btn2.disabled = false;
            btn3.disabled = false;
          }
        
        }
        requestAnimationFrame(step);
    
    
    
    让我们开始;
    const el=document.getElementById('count');
    const final=parseInt(el.textContent,10);
    常数持续时间=100000;
    
    const kashefButton=document.getElementById(“btn3”); kashefButton.addEventListener(“单击”,kashef); 函数kashef(){ document.getElementById('count')。innerHTML=1000-300; } 常数步长=ts=>{ 如果(!开始){ 开始=ts; } 让进度=(ts-开始)/持续时间; el.textContent=数学地板(进度*最终)*100; 时间=+el.textContent; 如果(进度<1){ 请求动画帧(步骤); } var btn1=document.getElementById('btn1'); var btn2=document.getElementById('btn2'); var btn3=document.getElementById('btn3'); const OpentButtons=200;
    if(time这是一个范围问题。kashdef的定义没有定义在事件侦听器可以找到它的范围内。将kashef的定义移到ts块之外(就在“const duration=100001;”之后),它就可以工作(在您的小提琴中验证).

    另一个想法是为事件处理程序使用一个内嵌函数。它确实使代码更难阅读,但避免了范围界定问题,特别是当您将此项目作为更大项目的一部分时:``kashefButton.addEventListener(“单击”,函数(){})“``伟大的大卫!!!感谢它为我在函数定义上的错误起到了作用。不过,请单击kashef按钮,不要从滚动计数器中减去。有什么建议吗?滚动计数器总是设置为当前时间戳的值和开始值(让进程…el.textcontent),覆盖您在按钮单击处理程序中所做的任何更改。您可能希望在按钮更改时更改start的值,而不是更改innerHTML以使其工作。您的意思是??const kashefButton=document.getElementById(“btn3”);kashefButton.addEventListener(“click”,kashef);function kashef(){start=200}