You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS如何实现点击HTML按钮时将其value属性值推入数组

问题描述

实现点击HTML按钮时,将对应按钮的value属性值推入指定数组,但当前代码运行时始终只会推入btn1的value值,无法正确获取btn2的值。

原有问题代码

HTML部分

<button id="btn1" value="btn1" onclick="clicked()">BTN1</button>
<button id="btn2" value="btn2" onclick="clicked()">BTN2</button>

JavaScript部分

function clicked(){
  var btn = document.getElementById("btn1");
  var newBtn = btn.value;
  arraySelected.push(newBtn);
  console.log(arraySelected);
}
故障原因
  • 函数逻辑写死了通过document.getElementById("btn1")获取DOM元素,无论哪个按钮触发点击事件,代码都只会读取btn1的value值。
  • 内联onclick事件绑定没有传入当前触发事件的按钮对象,函数无法定位实际被点击的元素。
  • 代码未提前初始化arraySelected数组,直接执行push操作会抛出变量未定义的报错。
修复方案

方案1:最小改动,内联事件传入当前元素

修改内联onclick的调用写法,传入代表当前元素的this参数,函数接收参数后即可读取对应按钮的value:
修改后HTML:

<button id="btn1" value="btn1" onclick="clicked(this)">BTN1</button>
<button id="btn2" value="btn2" onclick="clicked(this)">BTN2</button>

修改后JavaScript:

// 提前初始化目标数组
const arraySelected = [];
function clicked(currentBtn) {
  arraySelected.push(currentBtn.value);
  console.log(arraySelected);
}

方案2:逻辑分离,通过事件监听绑定(推荐)

去掉HTML里的内联onclick属性,在JavaScript中统一绑定事件,通过事件对象的target属性获取实际触发点击的按钮,实现HTML和JS逻辑解耦:
修改后HTML:

<button id="btn1" value="btn1">BTN1</button>
<button id="btn2" value="btn2">BTN2</button>

修改后JavaScript:

const arraySelected = [];
// 选中所有按钮,逐个绑定点击事件
document.querySelectorAll('button').forEach(btn => {
  btn.addEventListener('click', function(e) {
    // e.target 即为当前被点击的按钮元素
    arraySelected.push(e.target.value);
    console.log(arraySelected);
  })
})

两种方案都可以实现需求,第二种方案更符合前端代码分层的最佳实践,后续维护更方便。

内容的提问来源于stack exchange,提问作者Santi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.06 16:15:42