HTML/Javascript 点击计数器不工作

HTML/Javascript click counter not working

我正在 HTML 为我的朋友做一个 "cookie clicker" 风格的东西。

我得到了某种工作的点击计数器。 基本上,当您单击图像时,底部的数字应在每次单击时增加一个。然后在侧面有按钮可以更改每次单击时数字增加的数量。 即:当您在不按下按钮的情况下单击图像时,数字递增 1,当您按下“2 次点击”按钮时,每次单击数字 应该 递增 2。

当我单击按钮时,它们使数字增加给定的数量(在按钮上),然后单击图像什么也没做...

还有一些逻辑不通。

代码如下: `

<script type="text/javascript">
   //Inital click value
   var clicks = 0;
   
   //Click counters
   
   function clicklee1() {
    clicks += 1;
    document.getElementById("clicks").innerHTML = clicks;
   };
   function clicklee2() {
    clicks += 2;
    document.getElementById("clicks").innerHTML = clicks;
   };
   function clicklee3() {
    clicks += 5;
    document.getElementById("clicks").innerHTML = clicks;
   };
   function clicklee4() {
    clicks += 10;
    document.getElementById("clicks").innerHTML = clicks;
   };
   function clicklee5() {
    clicks += 100;
    document.getElementById("clicks").innerHTML = clicks;
   };
   function clicklee6() {
    clicks += 1000;
    document.getElementById("clicks").innerHTML = clicks;
   };
   function clicklee7() {
    clicks += 1000000;
    document.getElementById("clicks").innerHTML = clicks;
   };
   
   //Changing the "onclick" value of lee
   
   function changeclicks1() {
    document.getElementById("lee").onclick = clicklee1();
   }
   function changeclicks2() {
    document.getElementById("lee").onclick = clicklee2();
   }
   function changeclicks3() {
    document.getElementById("lee").onclick = clicklee3();
   }
   function changeclicks4() {
    document.getElementById("lee").onclick = clicklee4();
   }
   function changeclicks5() {
    document.getElementById("lee").onclick = clicklee5();
   }
   function changeclicks6() {
    document.getElementById("lee").onclick = clicklee6();
   }
   function changeclicks7() {
    document.getElementById("lee").onclick = clicklee7();
   }
   
   //Unlockable logic
   
   if(clicks < 5) {
            document.getElementById('changebutton2').disabled = true;
   }
   if(clicks >= 5) {
            document.getElementById('changebutton2').disabled = false;
   }
   
   if(clicks < 20) {
            document.getElementById('changebutton3').disabled = true;
   }
   if(clicks >= 20) {
            document.getElementById('changebutton3').disabled = false;
   }
   
   if(clicks < 50) {
            document.getElementById('changebutton4').disabled = true;
   }
   if(clicks >= 50) {
            document.getElementById('changebutton4').disabled = false;
   }
   
   if(clicks < 75) {
            document.getElementById('changebutton5').disabled = true;
   }
   if(clicks >= 75) {
            document.getElementById('changebutton5').disabled = false;
   }
   
   if(clicks < 200) {
            document.getElementById('changebutton6').disabled = true;
   }
   if(clicks >= 200) {
            document.getElementById('changebutton6').disabled = false;
   }
   
   if(clicks < 500) {
            document.getElementById('changebutton7').disabled = true;
   }
   if(clicks >= 500) {
            document.getElementById('changebutton7').disabled = false;
   }
  </script>
<img id="lee" src="lee.png" height="300" width="300" onclick="clicklee1()">
  <p>Clicks: <a id="clicks">0</a></p>
  <div class="unlocks" style="text-align: right;">
   <button id="changebutton1" onclick="changeclicks1()">1 Click</button><br>
   <p>Requires 5 clicks</p>
   <button id="changebutton2" onclick="changeclicks2()">2 Clicks</button><br>
   <p>Requires 20 clicks</p>
   <button id="changebutton3" onclick="changeclicks3()">5 Clicks</button><br>
   <p>requires 50 clicks</p>
   <button id="changebutton4" onclick="changeclicks4()">10 Clicks</button><br>
   <p>Requires 75 clicks</p>
   <button id="changebutton5" onclick="changeclicks5()">100 Clicks</button><br>
   <p>Requires 200 clicks</p>
   <button id="changebutton6" onclick="changeclicks6()">1,000 Clicks</button><br>
   <p>Requires 500 clicks<p/>
   <button id="changebutton7" onclick="changeclicks6()">1,000,000 Clicks</button>
  </div>

onclick 采用函数引用,而不是 return 由 function 编辑的值。

更改此行(对其他行也是如此)

document.getElementById("lee").onclick = clicklee1();

document.getElementById("lee").onclick = clicklee1;

There is also some logic that does not work.

该逻辑需要在 document.onload 事件处理程序中,因为 document.getElementById('changebutton2') 将 return 为空,否则该元素尚未加载到 DOM 中。

成功

document.onload = function(){
    if(clicks < 5) {
            document.getElementById('changebutton2').disabled = true;
    }
    if(clicks >= 5) {
            document.getElementById('changebutton2').disabled = false;
    }
    //rest of the logic
};

您的 post 中存在多个问题。

首先是脚本在html之前,这样可以防止 document.getElementById 可以工作,因为 html 还没有完全解析。它应该在 window.onload 或等效函数之后,或包含在其中。

第二个是另一个答案指出的,onclick 将函数作为参数,而不是其评估的结果。

第三:每个点击步骤都有一个特殊的功能是非常像意大利面条的代码。为什么不设置一个可以在您单击按钮时更改的步骤?

最后,您的最后一个 if 语句只执行一次,每次应该执行一次 click 值更改

您可以将其包装在每次单击图像时调用的函数中,或者使用 knockout 中的可观察对象。为了让它更接近您的输入代码,我采用了第一种方法。

//Inital click value
var clicks = 0;
var step = 1;

//Click counters

function clicklee() {
  clicks += step;
  document.getElementById("clicks").innerHTML = clicks;
  enableClicks();
};
//Changing the "onclick" value of lee

function changeclicks1() {
  step = 1;
}

function changeclicks2() {
  step = 2;
}

function changeclicks3() {
  step = 5;
}

function changeclicks4() {
  step = 10;
}

function changeclicks5() {
  step = 20;
}

function changeclicks6() {
  step = 100;
}

function changeclicks7() {
  step = 1000;
}

//Unlockable logic

function enableClicks() {
  if (clicks < 5) {
    document.getElementById('changebutton2').disabled = true;
  }
  if (clicks >= 5) {
    document.getElementById('changebutton2').disabled = false;
  }

  if (clicks < 20) {
    document.getElementById('changebutton3').disabled = true;
  }
  if (clicks >= 20) {
    document.getElementById('changebutton3').disabled = false;
  }

  if (clicks < 50) {
    document.getElementById('changebutton4').disabled = true;
  }
  if (clicks >= 50) {
    document.getElementById('changebutton4').disabled = false;
  }

  if (clicks < 75) {
    document.getElementById('changebutton5').disabled = true;
  }
  if (clicks >= 75) {
    document.getElementById('changebutton5').disabled = false;
  }

  if (clicks < 200) {
    document.getElementById('changebutton6').disabled = true;
  }
  if (clicks >= 200) {
    document.getElementById('changebutton6').disabled = false;
  }

  if (clicks < 500) {
    document.getElementById('changebutton7').disabled = true;
  }
  if (clicks >= 500) {
    document.getElementById('changebutton7').disabled = false;
  }
}
#lee {
  width: 50px;
  height: 50px;
  background-color: yellow;
}
.button {
  display: block;
}
<div id="lee" height="50" width="50" onclick="clicklee()">click me</div>
<p>Clicks: <a id="clicks">0</a>
</p>
<div class="unlocks">
  <div class="button">
    <button id="changebutton1" onclick="changeclicks1()">1 Click</button>
    <p>Requires 5 clicks</p>
  </div>
  <div class="button">
    <button id="changebutton2" onclick="changeclicks2()">2 Clicks</button>
    <p>Requires 20 clicks</p>
  </div>
  <div class="button">
    <button id="changebutton3" onclick="changeclicks3()">5 Clicks</button>
    <p>requires 50 clicks</p>
  </div>
  <div class="button">
    <button id="changebutton4" onclick="changeclicks4()">10 Clicks</button>
    <p>Requires 75 clicks</p>
  </div>
  <div class="button">
    <button id="changebutton5" onclick="changeclicks5()">20 Clicks</button>
    <p>Requires 200 clicks</p>
  </div>
  <div class="button">
    <button id="changebutton6" onclick="changeclicks6()">100 Clicks</button>
    <p>Requires 500 clicks
      <p/>
  </div>
  <div class="button">
    <button id="changebutton7" onclick="changeclicks7()">1000 Clicks</button>
    <p>Requires 2000 clicks<p/>
  </div>
</div>