点击两个星级评分系统均输出第二个fieldset父ID的问题求助
嘿,我明白你遇到的问题了——这其实是因为你用parent()只获取了当前radio的直接父元素,而不是它所在的那个fieldset祖先元素。咱们一步步来解决:
首先先明确你的问题场景:
现有两个星级评分系统,每个系统的父级fieldset元素拥有不同的ID。期望实现点击第一个星级评分系统时输出其所在父级fieldset的ID,点击第二个时输出对应父级fieldset的ID,但实际操作中,两个评分系统点击后均输出第二个(最后一个)fieldset的ID。当前使用的代码如下:
$(document).on('change', 'input[type="radio"]', function (e) { console.log($(this).parent().attr('id')); });
问题根源
星级评分的radio按钮通常会被包裹在<label>标签里,所以$(this).parent()拿到的是radio的直接父元素(也就是label),而不是外层的fieldset。如果label本身没有设置ID,jQuery找不到对应属性时,可能会因为DOM遍历的意外逻辑返回错误的元素ID,就出现了你看到的“都输出最后一个fieldset ID”的情况。
修正方案
把parent()换成closest('fieldset')——这个方法会从当前radio元素开始,向上遍历DOM树,精准找到最近的匹配fieldset祖先元素,完美适配你的需求。
修正后的代码:
$(document).on('change', 'input[type="radio"]', function (e) { console.log($(this).closest('fieldset').attr('id')); });
更严谨的版本(可选)
如果想避免找不到fieldset时输出undefined,可以加个简单的判断:
$(document).on('change', 'input[type="radio"]', function (e) { const targetFieldset = $(this).closest('fieldset'); if (targetFieldset.length) { console.log(targetFieldset.attr('id')); } else { console.log('未找到对应的fieldset容器'); } });
试试这个方案,应该就能正确输出每个评分系统对应的fieldset ID了!
内容的提问来源于stack exchange,提问作者Mr. PV

