javascript - 跟踪多个按钮以及每个按钮被点击的次数

标签 javascript

我的 html 中有多个可点击元素,并且想跟踪每个按钮被点击的次数。 我可以做一个非常不优雅的解决方案,其中包括为每个按钮提供一个特定的函数,例如函数button1()、函数button2()等...由onclick调用,但我确信有更好的方法来做到这一点。 感谢您的帮助。

<div class="starter">
        <h3>Starter</h3>
        <div class="starterItems">
            <button type="button" id="salmon" >Salmon Tartare with fresh diced tomatoes</button>
            <button type="button" id="prawn" >Prawn Cocktail with homemade marrinade</button>
            <button type="button" id="soup">Asparagus Soup served with croutons</button>
        </div>
</div>


var salmon = document.getElementById('salmon'), 
prawn = document.getElementById('prawn'),
soup = document.getElementById('soup'),
clicks = {}; 

function click(e){
var id = e.target.id; 
if(!clicks[id])
    clicks[id]=0;
clicks[id]++;
e.target.textContent = clicks[id];
}

salmon.addEventListener('click', click); 
prawn.addEventListener('click', click); 
soup.addEventListener('click', click); 

最佳答案

使用元素的 id 作为键:

var b1 = document.getElementById('b1'),
  b2 = document.getElementById('b2'),
  b3 = document.getElementById('b3'),
  clicks = {};

function click(e) {
  var id = e.target.id;
  if (!clicks[id])
    clicks[id] = 0;
  clicks[id]++;
  e.target.textContent = clicks[id];
}

b1.addEventListener('click', click);
b2.addEventListener('click', click);
b3.addEventListener('click', click);
<button id="b1">Button 1</button>
<button id="b2">Button 2</button>
<button id="b3">Button 3</button>

<小时/>

使用data-属性:

var b1 = document.getElementById('b1'),
  b2 = document.getElementById('b2'),
  b3 = document.getElementById('b3');

function click(e) {
  if (!e.target.getAttribute('data-clicks'))
    e.target.setAttribute('data-clicks', 0);
  var clicks = parseInt(e.target.getAttribute('data-clicks'));
  e.target.setAttribute('data-clicks', clicks + 1);
  e.target.textContent = clicks + 1;
}

b1.addEventListener('click', click);
b2.addEventListener('click', click);
b3.addEventListener('click', click);
<button id="b1">Button 1</button>
<button id="b2">Button 2</button>
<button id="b3">Button 3</button>

<小时/>

而且,正如其他人提到的,使用 localStorage 也是一个有效的选项。实现类似于上面使用 id 作为键。

关于javascript - 跟踪多个按钮以及每个按钮被点击的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35674004/

相关文章:

javascript - 打开弹出窗口后谷歌浏览器上出现奇怪的行,如何避免?

javascript - 切换显示 :none to all tags in JavaScript (no jQuery) without classes : is it possible?

javascript - 获取鼠标移动速度

javascript - 引入抽象类或属性时 typescript 错误?

javascript - NetSuite - 使用行项目字段自动填充自定义正文字段

javascript - 有没有办法遍历我的所有函数并查看哪些变量未正确声明?

javascript - Javascript 自执行函数是否像编译程序一样工作

JavaScript 文本操作

javascript - 从 .css 移动到 jQuery css(),在动态添加元素时不起作用

javascript - 模块.exports : is not a function