Dropdown与Radio Button绑定异常:代码无法进入else if分支求助
嘿,我一眼就看到问题出在哪了——你的条件判断逻辑写错啦!
你现在用if (rachat)和else if (arbitrage)来判断,但这里的rachat和arbitrage是jQuery选择器返回的对象,不管有没有匹配到元素,jQuery对象永远是真值,所以第一个if分支永远会触发,else if自然永远进不去。
咱们来修正这个逻辑,同时优化一下单选按钮的状态设置(用prop()比attr()更适合处理checked这种动态DOM属性):
修正后的JavaScript代码
jQuery(document).ready(function($) { $('.dropdown-menu').on('click', 'a', function() { var text = $(this).html(); var $clickedItem = $(this); // 先重置所有相关单选按钮的选中状态 $('.radio2, .radio3').prop('checked', false); // 判断当前点击的是rachat还是arbitrage的选项 if ($clickedItem.hasClass('rachat')) { $('.radio2').prop('checked', true); } else if ($clickedItem.hasClass('arbitrage')) { $('.radio3').prop('checked', true); } // 更新dropdown按钮的显示文本 $(this).closest('.dropdown').find('.dropdown-toggle').html(text); }); });
关键修正点解释:
- 改用
$(this).hasClass('类名')来判断当前点击的选项属于哪一类,这才是正确的判断方式 - 用
prop('checked', true/false)来设置单选按钮的选中状态,这是jQuery官方推荐的处理动态DOM属性的方法(attr()更适合处理HTML原生属性,比如src、href) - 先重置所有相关单选的状态,再设置对应选中的,逻辑更清晰,避免出现多个单选被选中的异常情况
另外,你原来的else分支里用attr('unchecked', 'unchecked')是无效的,因为单选按钮没有unchecked这个属性,取消选中就用prop('checked', false)就可以啦。
内容的提问来源于stack exchange,提问作者Kira
相关产品推荐
相关产品推荐

