Django模板循环渲染select标签ID固定不变,AJAX提交参数异常如何解决
问题根因
你的jQuery代码中ID取值逻辑存在错误:使用类选择器$(".status_select")会匹配页面上所有符合条件的下拉框元素,调用.attr("id")时默认只会返回第一个匹配到的元素的ID,因此无论你操作哪个下拉框,拿到的都是页面第一个下拉框的固定ID(你的场景里就是ID=4)。
修复方案
将change事件回调中的ID取值逻辑修改为获取当前触发事件的元素的ID即可:
// 原错误代码 id = $(".status_select").attr("id"); // 替换为以下任意一种正确写法 id = $(this).attr("id"); // jQuery写法 id = this.id; // 原生JS写法,性能更优
修正后的完整jQuery代码如下:
$("body").on("change", ".status_select", function (e) { e.stopPropagation(); const selectedVal = $(this).val(); const id = this.id; console.log(selectedVal, id); $.ajax({ url: "/users/status_change/", type: "GET", data: { id: id, selected_val: selectedVal, }, success: function (data) { console.log(data); }, error: function (error) { console.log(error); }, }); });
注:原代码中GET请求设置
contentType: "application/json"属于无效配置,GET请求的参数会自动拼接在URL后,不需要该配置,因此可以直接删除。
排查验证方法
- 打开浏览器开发者工具的元素面板,检查所有下拉框的id属性,确认模板渲染的ID确实是随用户动态变化的,排除模板渲染错误
- 在change事件回调中打印
this,确认触发事件的元素和你当前操作的下拉框一致 - 触发下拉框修改,查看控制台打印的ID是否和操作的下拉框ID匹配
内容的提问来源于stack exchange,提问作者Atif Shafi
相关产品推荐
相关产品推荐

