flyinbird 2015-06-19 14:35 采纳率: 0%
浏览 1698

请教Extjs 2.0 扩展控件怎么写才能兼容多浏览器

代码如下,只能在IE里使用,火狐等其他浏览器导致表单其他控件不显示
请教指点,应该怎么完善代码,才能让该扩展控件 兼容多浏览器

//RadioList
/* --使用范例
{
xtype:'radiolist',
fieldLabel: '列表',
anchor:'90%',
id:'ListRadio',
store: new Ext.data.SimpleStore({
fields: ['value', 'text'],
data : [['Female', '女孩'],['Male', '男孩']]
}),
valueField : 'value',
displayField : 'text'
}
*/
Ext.form.RadioList = Ext.extend(Ext.form.TextField, {

defaultAutoCreate : {tag: "input", type: "hidden", size: "0",'readonly':'true', autocomplete: "off"},

initComponent : function()
{
    Ext.form.RadioList.superclass.initComponent.call(this);
    if(!this.store)
    {
        this.store = new Ext.data.SimpleStore({
            'id': 0,
            fields: ['value', 'text'],
            data : []
        });
        this.valueField = 'value';
        this.displayField = 'text';
    }

    if(!this.id)
    {
        this.id = Ext.id();
    }
},
onRender : function(ct, position)
{           
    Ext.form.RadioList.superclass.onRender.call(this, ct, position);

    this.initRadioList();
},  

initRadioList :function()
{ 
    var strCSS = (!Ext.isIE) ? 'margin-top:5px' : '';
    var divObj = this.el.dom.parentNode;

    var sd = this.store.data;
    if(sd && this.valueField && this.displayField)
    {
        for(var i=0;i<sd.length;i++)
        {   
            var strid = Ext.id();
            Ext.DomHelper.append(divObj,{tag: 'input',type: 'radio', id: strid, name:this.id, value:sd.items[i].data[this.valueField],style:strCSS},false);
            Ext.DomHelper.append(divObj,{tag: 'label', 'class': 'x-form-cb-label', 'for': strid, html: sd.items[i].data[this.displayField]}, false);          
        }
        if(this.value){
            this.setValue(this.value);
        }
        //加入事件
        var radioArr = this.el.dom.parentNode.getElementsByTagName("INPUT");
        for(var i=0;i<radioArr.length;i++)
        {
            if(radioArr[i].type == "radio")
            {
                radioArr[i].attachEvent('onclick',function(){
                    this.fireEvent('change', this, null, null);
                }.createDelegate(this));
            }
        }
    }      
},  

getValue : function()
{
    if(this.el == null) return "";
    var radioArr = this.el.dom.parentNode.getElementsByTagName("INPUT");
    if(radioArr == null) return "";
    for(var i=0;i<radioArr.length;i++)
    {
        if(radioArr[i].type == "radio" && radioArr[i].checked)
        {
            this.el.dom.value = radioArr[i].value;
            return radioArr[i].value;
        }
    }
    return "";
},

setValue : function(strValue)
{
    if(strValue == null || this.el == null)return;
    var radioArr = this.el.dom.parentNode.getElementsByTagName("INPUT");
    for(var i=0;i<radioArr.length;i++)
    {
        if(radioArr[i].type == "radio" && radioArr[i].value == strValue)
        {
            radioArr[i].checked = true;
            this.el.dom.value = radioArr[i].value;
            break;
        }
    }        
},

validate : function()
{
    if(!this.allowBlank && this.getValue() == "")
        return false;
    else
        return true;
}

});
Ext.reg('radiolist', Ext.form.RadioList);

  • 写回答

3条回答

  • devmiao 2015-06-19 15:16
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿