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

jQuery实现点击按钮后如何重置选中值并替换对应顺位选项

完整实现代码

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style>
.selected {
  background: #e0e0e0;
}
.clicked-order {
  display: inline-block;
  margin-right: 8px;
}
.reset {
  margin-left: 4px;
  padding: 0 4px;
  cursor: pointer;
  border: none;
  background: #ff4444;
  color: #fff;
  border-radius: 2px;
  font-size: 12px;
}
</style>
<div class="demo"></div>
<div class="clicked-order"></div>
<button id="one" class="vehicle" value="car">Car</button>
<div class="clicked-order"></div>
<button id="two" class="vehicle" value="bus">Bus</button>
<div class="clicked-order"></div>
<button id="three" class="vehicle" value="truck">Truck</button>
<div class="clicked-order"></div>
<button id="four" class="vehicle" value="copter">Copter</button>
<div class="clicked-order"></div>
<button id="five" class="vehicle" value="train">Train</button>

<script>
(function($){
  jQuery.fn.isEmpty = function() {
    return !$.trim(this.html()).length;
  };
}(jQuery));

// 核心配置
const LIMIT = 3;
const SEP = ',';
// 存储选中项,下标对应顺位-1,空位置为null
let selection = new Array(LIMIT).fill(null);

// 统一渲染函数
function render() {
  // 渲染结果容器
  $('.demo').text(selection.filter(Boolean).map(item => item.val).join(SEP));
  // 重置所有按钮状态和顺位标记
  $('.clicked-order').empty().hide();
  $('button.vehicle').removeClass('selected');

  // 按按钮分组统计关联的顺位
  const btnOrderMap = {};
  selection.forEach((item, index) => {
    if (!item) return;
    const btnId = $(item.el).attr('id');
    if (!btnOrderMap[btnId]) btnOrderMap[btnId] = [];
    btnOrderMap[btnId].push(index + 1);
  });

  // 渲染每个按钮的顺位和删除按钮
  Object.entries(btnOrderMap).forEach(([btnId, orders]) => {
    const $btn = $(`#${btnId}`);
    $btn.addClass('selected');
    const $orderDiv = $btn.prev('.clicked-order');
    $orderDiv.show();
    const orderHtml = orders.map(order => `${order} <button class="reset" data-order="${order}">X</button>`).join(' & ');
    $orderDiv.html(orderHtml);
  });
}

// 车辆按钮点击事件
$("button.vehicle").click(function() {
  // 优先找第一个空的顺位位置
  const emptyIndex = selection.findIndex(item => item === null);
  if (emptyIndex === -1) return;

  // 存入选中信息
  selection[emptyIndex] = {
    val: $(this).val(),
    el: this
  };
  render();
});

// 重置按钮点击事件(事件委托适配动态生成的按钮)
$(document).on('click', '.reset', function(e) {
  e.stopPropagation();
  const order = parseInt($(this).data('order'));
  selection[order - 1] = null;
  render();
});
</script>

功能说明

  • 最多支持选中3个选项,新增选项会优先填充已删除释放的空顺位,不会默认追加到末尾
  • 同一按钮支持被多次选中,会在旁边显示所有关联的顺位,每个顺位对应独立的X删除按钮
  • 点击X按钮会立即释放对应顺位名额,同时同步更新.demo容器的输出内容和按钮选中状态
  • 原有的点击顺序展示、多选同一选项的逻辑完全保留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:36:10