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

JavaScript动态增删下拉框时无法正确删除数组指定元素如何解决

问题核心原因
  • JavaScript的indexOf方法对引用类型(比如对象)是按内存地址匹配,不是按属性值匹配。你删除时新建的{"store_id": xxx}对象和stores数组里存储的对应对象是两个不同的对象,地址完全不同,所以永远返回-1。
  • 现有删除逻辑里存在索引对应错误,你已经在oldValue数组里按索引存储了每个下拉框对应的对象引用,不需要额外新建对象匹配。
直接修复现有代码的方案

只需要修改删除按钮的点击事件逻辑即可:

$("#remove" + index).click(function () {
  // 直接用oldValue中对应索引的对象引用匹配
  var eleIndex = stores.indexOf(oldValue[index]);
  if (eleIndex !== -1) {
    stores.splice(eleIndex, 1);
    oldValue.splice(index, 1);
  }
  $(this).closest("div").remove();
});
更省心的优化方案(推荐)

你完全不需要实时维护stores和oldValue两个数组,提交的时候当场遍历所有现存的下拉框收集选中值,既能避免索引同步出错,代码也更简洁:

// 需要提交数据时调用该方法即可拿到正确的选中值数组
function getSubmitData() {
  const selectedStores = [];
  // 匹配所有name属性以market开头的下拉框
  $('select[name^="market"]').each(function () {
    selectedStores.push({
      store_id: parseInt($(this).val(), 10)
    });
  });
  return selectedStores;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:54:04