如何在JavaScript中存储对比前后分类ID,不一致时清空子分类
解决分类变更时子分类无法清空的问题
你的代码核心问题是保存上一次分类ID的变量作用域不对:previousCategory是myFunction内部的局部变量,每次调用函数时都会重新获取当前分类的ID,导致previousCategory和category_id永远是同一个值,自然触发不了子分类清空的逻辑。
修正方案
把保存上一次分类ID的变量移到函数外部,让它在多次函数调用之间保留值:
$(document).ready(function () { // 把变量放在函数外部,作为闭包变量保存上一次的分类ID let previousCategory = $("#selectcategory").val(); function myFunction() { const currentCategory = $("#selectcategory").val(); const subcat_id = $("#selectsubcat").val(); console.log(previousCategory, currentCategory); // 对比当前ID和上一次的ID if (currentCategory !== previousCategory) { $("#selectsubcat").val(null); // 如果需要后续使用subcat_id,这里也可以更新 // subcat_id = null; } // 更新上一次的ID为当前值,供下次对比使用 previousCategory = currentCategory; // console.log(currentCategory, subcat_id); } $("#search").keyup(myFunction); $("#selectsubcat").on("change", myFunction); $("#selectcategory").on("change", myFunction); });
关键改动说明
- 变量作用域调整:
previousCategory从函数内部移到$(document).ready的回调函数内部,成为闭包变量,这样每次调用myFunction时都能访问到上一次保存的分类ID。 - 避免重复声明变量:原代码里重复声明了
category_id,修正后用currentCategory明确区分当前ID和上一次ID,逻辑更清晰。 - 更新历史值:每次函数执行完对比逻辑后,把
previousCategory更新为当前分类ID,确保下次调用时能正确对比。
另外,你绑定的#search的keyup和#selectsubcat的change事件是否需要触发这个逻辑,可以根据实际业务需求调整,不需要的话可以移除,避免不必要的函数执行。
内容的提问来源于stack exchange,提问作者Meera
相关产品推荐
相关产品推荐

