extjs 不用name的radio二选一如何实现

2024-12-03 01:05:26
推荐回答(4个)
回答1:

在选中事件里处理

选中name1时去判断name2是否选中,如果已选中,则取消选中;

选中name2时类似的去判断name1

参考一下:


     xtype : 'radiogroup',
     fieldLabel : '性别*',
     name : 'gender',
     allowBlank : false,
     msgTarget:'qtip',
     anchor : '95%',
     items : [{
     boxLabel : '男',
     name : 'sex1',
     inputValue : '1',
     //checked : true,
     listeners: {
             change: function(obj,nv,ov){
                  if(nv){//选中
                   var s2 = obj.up('radiogroup').down('radio[name="sex2"]');//sex2
                   if(s2.value){//如果sex2选中,取消
                   s2.setValue(!nv);
                   }
                  }                   
             }
         }
     },{
     boxLabel : '女',
     name : 'sex2',
     inputValue : '2',
     listeners: {
     change: function(obj,nv,ov){
                  if(nv){//选中
                   var s1 = obj.up('radiogroup').down('radio[name="sex1"]');//sex1
                   if(s1.value){//如果sex1选中,取消
                   s1.setValue(!nv);
                   }
                  }
             }
         }
     }]
    

回答2:

有个readOnly属性设置为true.

回答3:

用js加个事件来控制,例如:click

当选择其中一个时,将其他的设置为非选中状态即可

回答4:

重写某个函数即可
Ext.define('Ext.form.field.Radio', {
override : 'Ext.form.field.Radio',
onChange : function (newVal, oldVal) {
var me = this,
r,
rLen,
radio,
radios;

me.callParent(arguments);

if (newVal) {
radios = me.up().query('radio');
rLen = radios.length;

for (r = 0; r < rLen; r++) {
radio = radios[r];

if (radio !== me) {
radio.setValue(false);
}
}
}
}
});
放到你们框架就行