You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS使用ng-repeat时如何实现radio按钮动态禁用与启用

问题根因

  • HTML中输入框的ng-model和控制器的changeapplicant方法重名,输入值会直接覆盖方法定义,导致后续变更无法正确触发逻辑
  • 触发状态变更的方法中没有每次先重置所有选项的禁用状态,也没有覆盖所有输入场景的处理分支,非匹配场景下不会修改禁用状态,所以无法恢复启用
  • 现有逻辑只处理了非Male选项的状态设置,未对应修改Male选项的禁用状态

修复后代码

控制器JS代码

PPCO.cusGender = [ {
    id : '1',
    key : 'Male',
    value : 'Male',
    disable: false
}, {
    id : '2',
    key : 'Female',
    value : 'Female',
    disable: false
}, {
    id : '3',
    key : 'TG',
    value : 'TG',
    disable: false
}];

// 单独定义输入框绑定变量,避免和方法重名
PPCO.p_SALUTATION = '';

PPCO.changeapplicant = function() {
    // 每次触发先重置所有选项为启用状态
    angular.forEach(PPCO.cusGender, function(val) {
        val.disable = false;
    });
    const salutation = PPCO.p_SALUTATION.toLowerCase().trim();
    switch (salutation) {
        case 'mrs.':
        case 'miss.':
            // 女士称呼时禁用Male选项
            angular.forEach(PPCO.cusGender, function(val) {
                if(val.key === 'Male') {
                    val.disable = true;
                }
            });
            break;
        case 'mr.':
            // 男士称呼时禁用非Male选项
            angular.forEach(PPCO.cusGender, function(val) {
                if(val.key !== 'Male') {
                    val.disable = true;
                }
            });
            break;
        // 其他输入场景默认全启用,已在开头重置无需额外处理
        default:
            break;
    }
};

HTML代码

<!-- ng-model绑定单独定义的变量,不要和方法重名 -->
<input type="text" ng-model="PPCO.p_SALUTATION" class="color" ng-change="PPCO.changeapplicant()">

<label class="radio" ng-repeat="option in PPCO.cusGender">
    <input type="radio" name="gender"
           ng-model="PPCO.cusgendername" value="{{option.value}}" 
           ng-disabled="option.disable">
    <i></i>
</label>

内容的提问来源于stack exchange,提问作者sandeep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:51:03