關(guān)鍵詞:點(diǎn)擊計(jì)數(shù)
我們做個(gè)小實(shí)例,當(dāng)鼠標(biāo)點(diǎn)擊每個(gè)按鈕時(shí),顯示點(diǎn)擊該按鈕的次數(shù)
<!-- HTML代碼 -->
<button>單擊1</button>
<button>單擊2</button>
<button>單擊3</button>
<button>單擊4</button>
<button>單擊5</button>
var btn = document.querySelectorAll("button");
var i = 0;
var count = 0;
通常初學(xué)者會(huì)這樣做
// 初學(xué)者傳統(tǒng)的做法一般是這樣的
for(i=0;i<btn.length;i++){
btn[i].onclick = function(){
count++;
console.log(count);
}
}
// 但是這種方法不能實(shí)現(xiàn)每個(gè)按鈕分別計(jì)數(shù)
我思來(lái)想去,覺(jué)得可能是count有問(wèn)題,所以對(duì)代碼進(jìn)行了改版
// 把count放在了for循環(huán)里
for(i=0;i<btn.length;i++){
count++;
add(btn[i])
}
function add(obj) {
obj.onclick = function () {
console.log(count);
}
}
// 但是每次結(jié)果都是5 555[捂臉]~
for這個(gè)循環(huán),飛速完成了所有的遍歷,讓我猝不及防~
既然是對(duì)每個(gè)按鈕做點(diǎn)擊計(jì)數(shù),那我就把count放在點(diǎn)擊事件外面!
for(i=0;i<btn.length;i++){
add(btn[i])
}
function add(obj) {
var count = 0;
obj.onclick = function () {
count++;
console.log(count);
}
}
// 來(lái)之不易的成功!
其實(shí)我們還可以通過(guò)閉包的方法實(shí)現(xiàn)這一功能,Mark下我的另一篇文章 [閉包][]
[閉包]: http://www.itdecent.cn/p/5190f033d6fd
for(i=0;i<btn.length;i++) {
btn[i].onclick = (function (count) {
return function () {
count++;
console.log(count);
}
})(0); // 小括號(hào)里是function的參數(shù)