当前位置:首页 > JavaScript

js 实现单选

2026-03-15 09:29:32JavaScript

使用原生 JavaScript 实现单选功能

通过 querySelectorAll 获取所有单选按钮元素,遍历并为每个按钮添加点击事件监听器。点击时取消之前选中的按钮状态,并设置当前按钮为选中状态。

const radioButtons = document.querySelectorAll('.radio-button');
radioButtons.forEach(button => {
  button.addEventListener('click', function() {
    radioButtons.forEach(btn => btn.classList.remove('active'));
    this.classList.add('active');
  });
});

使用 HTML 和 CSS 配合实现

HTML 结构使用 input[type="radio"] 原生单选控件,通过 label 标签关联实现点击触发。CSS 隐藏原生单选按钮,自定义样式通过 :checked 伪类控制。

js 实现单选

<div class="radio-group">
  <input type="radio" id="option1" name="radioGroup" checked>
  <label for="option1">选项1</label>
  <input type="radio" id="option2" name="radioGroup">
  <label for="option2">选项2</label>
</div>
input[type="radio"] {
  display: none;
}
label {
  padding: 8px 16px;
  border: 1px solid #ddd;
  cursor: pointer;
}
input[type="radio"]:checked + label {
  background-color: #007bff;
  color: white;
}

使用事件委托优化性能

在父元素上监听点击事件,通过事件冒泡机制处理子元素单选逻辑。适合动态生成的单选按钮列表,减少事件监听器数量。

js 实现单选

document.getElementById('radioContainer').addEventListener('click', (e) => {
  if (e.target.classList.contains('radio-item')) {
    const items = document.querySelectorAll('.radio-item');
    items.forEach(item => item.classList.remove('active'));
    e.target.classList.add('active');
  }
});

数据驱动的实现方式

将选项数据存储在数组中,动态生成单选按钮,并通过 dataset 属性保存关联值。

const options = [
  { id: 1, text: '红色' },
  { id: 2, text: '蓝色' }
];

const container = document.getElementById('radio-container');
options.forEach(opt => {
  const btn = document.createElement('div');
  btn.className = 'radio-btn';
  btn.dataset.value = opt.id;
  btn.textContent = opt.text;
  btn.addEventListener('click', handleRadioSelect);
  container.appendChild(btn);
});

function handleRadioSelect(e) {
  document.querySelectorAll('.radio-btn').forEach(b => {
    b.classList.toggle('selected', b === e.target);
  });
}

表单集成方案

与表单提交结合时,使用 hidden input 存储实际值,方便表单序列化处理。

<div class="custom-radios">
  <div class="radio-option" data-value="A">选项A</div>
  <div class="radio-option" data-value="B">选项B</div>
  <input type="hidden" name="radioValue" id="radioValue">
</div>
const options = document.querySelectorAll('.radio-option');
options.forEach(option => {
  option.addEventListener('click', () => {
    options.forEach(opt => opt.classList.remove('selected'));
    option.classList.add('selected');
    document.getElementById('radioValue').value = option.dataset.value;
  });
});

标签: 单选js
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…

js实现图片移动

js实现图片移动

使用CSS和JavaScript实现图片移动 方法一:使用CSS动画结合JavaScript控制 通过CSS定义动画关键帧,JavaScript动态添加或移除动画类。 /* CSS部分 */ .m…

js实现同步

js实现同步

同步与异步的概念 在JavaScript中,同步代码会按照顺序执行,每一行代码必须等待上一行代码执行完成后才能运行。异步代码则允许在等待某些操作(如网络请求)完成的同时继续执行其他代码。 实现同步的…

vue 单选组合 实现

vue 单选组合 实现

Vue 单选组合实现 在 Vue 中实现单选组合可以通过多种方式完成,常见的方法包括使用原生 HTML 的 <input type="radio"> 结合 Vue 的数据绑定,或使用第三方…