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
相关产品推荐
相关产品推荐

