ext 文件输入域控件

直接上代码:

/**
 * 文件输入域控件

    ext 3.0.0
 * 说明:实现了多个文件输入域的自由增删,并带有文件格式,及文件名长度验证功能

 * 使用方法:
 * <div align="left" id="div_bid_affix"></div>
 * new Ext.form.InputField({
            renderTo : 'div_bid_affix',
            inputId : 'inData.accessory',
            alone :true
        });
 * @version 1.0
 * @author DuanYong
 * @since 2010-11-15
 * @class Ext.form.InputField
 * @extends Ext.BoxComponent
 */
Ext.form.InputField = Ext.extend(Ext.BoxComponent,  {
    'renderTo':'',//组件渲染ID,必填
    'inputId':'',//生成的文件输入框的name和id,必填
    'addBtnTitle':'',//添加按钮的名称
    'types':['txt','pdf','doc','xls','docx','rar','zip','ppt'],//允许的上传类型,数组
    'maxFileNameLength':40,//允许的文件名称总长度,默认40
    'alone':false,//是否是单个控件,默认多控件
    'inputWidth':300,//文件输入框的长度,默认300
    'inputHeight':25,//文件输入框的高度,默认25
    initComponent : function(){
        Ext.form.InputField.superclass.initComponent.call(this);
        this.rootDiv = Ext.getDom(this.renderTo);
    },
    onRender : function(ct, position){
         Ext.form.InputField.superclass.onRender.call(this, ct, position);
         if(!this.alone){
             this.initBtn();
         }
         this.createInput();
    },
    //private
    /**
     * 初始化按钮
     */
    initBtn : function(){
        var owner = this;
        var addBtn=document.createElement("input");
        addBtn.type="button";
        addBtn.value=" + "+this.addBtnTitle || '添加';
        addBtn.onclick = function(){ owner.createInput()};
        this.addButtonStyle(addBtn);
        this.rootDiv.appendChild(addBtn);
    },
    //private
    /**
     * 删除文件输入框
     * @param {} DelDivID 待删除文件输入框ID
     */
    removeInput : function(DelDivID){
         this.rootDiv.removeChild(Ext.getDom(DelDivID));
    },
    //private
    /**
     * 创建一个文件输入框
     */
    createInput : function(){
        var owner = this;
        var x=parseInt(Math.random()*(80-1))+1;
        var divName=this.inputId+x.toString();//随机div容器的名称
        var div = document.createElement("div");
        div.name=divName;
        div.id=divName;
        //创建一个文件输入域
        var aElement = document.createElement("input");
        aElement.name=this.inputId;
        aElement.id=this.inputId;
        aElement.type="file";//设置类型为file
        aElement.className = "inputFile";
        //aElement.setAttribute("style","width:"+this.inputWidth+"px;height:"+this.inputHeight+"px");
        //aElement.setAttribute("size",50);
        aElement.width = this.inputWidth;
        aElement.height = this.inputHeight;
        aElement.onkeydown=function(){return false;};
        aElement.onpaste=function(){return false;};
        aElement.onchange=function(){
            if(!Ext.isEmpty(this.value.replace(/\s*/g,""),false) && !owner.validate(this.value)){
                owner.removeInput(divName);
                owner.createInput();
            }
        };
        div.appendChild(aElement);//将input file加入div容器
        if(!this.alone){
            //创建一个删除按钮
            var delBtn=document.createElement("input");
            delBtn.type="button";
            delBtn.value=" - 删除";
            delBtn.height = this.inputHeight;
            delBtn.onclick=function(){ owner.removeInput(divName)};
            this.addButtonStyle(delBtn);
            div.appendChild(delBtn);//将删除按钮加入div容器
        }
        this.rootDiv.appendChild(div);//将div容器加入父元素
    },
    //private
    /**
     * 取得文件类型
     * 说明:如果文件路径不为空,则返回文件类型,否则返回空
     * @param {} filePath 文件路径
     * @return {String} 文件类型
     */
    getFileType: function(filePath){
        if(!Ext.isEmpty(filePath,false)){
            return filePath.substring(filePath.lastIndexOf('.')+1,filePath.length);
        }
        return '';
    },
    //private
    /**
     * 取得文件名长度
     * 说明:如果文件路径不为空,则返回文件长度,否则返0
     * @param {} filePath 文件路径
     * @return {String} 文件类型
     */
    getFileNameLength: function(filePath){
        if(!Ext.isEmpty(filePath,false)){
            return filePath.length - filePath.lastIndexOf("\\") - 1;
        }
        return 0;
    },
    //private
    /**
     * 文件格式校验
     * @param {} filePath 文件路径
     * 说明:如果指定了文件格式则校验之,否则返回true
     * @return {Boolean} 是否在文件指定的格式中
     */
    validate : function(filePath){
        //文件名长度校验
        if(!this.checkFileNameLength(filePath)){
            Msg.error('错误信息提示','文件名称总长度超过:'+this.maxFileNameLength);
            return false;
        }
        //文件格式校验
        if(!this.checkFileType(this.getFileType(filePath))){
            Msg.error('错误信息提示','文件类型不正确,允许的文件类型为:'+this.types);
            return false;
        }
        return true;
    },
    //private
    /**
     * 文件格式校验
     * 说明:如果指定了文件格式则校验之
     * @return {Boolean} 是否在文件指定的格式中,存在返回true
     */
    checkFileType : function(fileType){
        if(this.types){
            var haveType = false;
            for(var i=0;i<this.types.length;i++){
                if(this.types[i].toUpperCase() == fileType.toUpperCase()){
                    haveType = true;
                    break;
                }
            }
            return haveType;
        }
        return true;
    }
    ,
    //private
    /**
     * 文件名长度校验
     * 说明:如果指定了文件名长度则校验
     * @return {Boolean} 未超过指定长度 返回TRUE
     */
    checkFileNameLength : function(filePath){
        if(this.maxFileNameLength){
            return this.getFileNameLength(filePath) <= this.maxFileNameLength ? true : false
        }
        return true;
    }
    ,
    //private
    /**
     * 给按钮添加样式
     * 说明:给按钮添加样式
     * @param {} btn 按钮
     */
    addButtonStyle : function(btn){
        btn.className = 'inputFileBtn_mouseout';
        btn.onmouseover = function(){ btn.className = 'inputFileBtn_mouseover';};
        btn.onmouseout = function(){ btn.className = 'inputFileBtn_mouseout';};
        btn.onmousedown = function(){ btn.className = 'inputFileBtn_mousedown';};
        btn.onmouseup = function(){ btn.className = 'inputFileBtn_mouseup';};
    }
   
   
});
//注册xtype
Ext.reg('inputField', Ext.form.InputField);

【事件触发一致性】研究多智能体网络如何通过分布式事件驱动控制实现有限时间内的共识(Matlab代码实现)内容概要:本文围绕多智能体网络中的事件触发一致性问题,研究如何通过分布式事件驱动控制实现有限时间内的共识,并提供了相应的Matlab代码实现方案。文中探讨了事件触发机制在降低通信负担、提升系统效率方面的优势,重点分析了多智能体系统在有限时间收敛的一致性控制策略,涉及系统模型构建、触发条件设计、稳定性与收敛性分析等核心技术环节。此外,文档还展示了该技术在航空航天、电力系统、机器人协同、无人机编队等多个前沿领的潜在应用,体现了其跨学科的研究价值和工程实用性。; 适合人群:具备一定控制理论基础和Matlab编程能力的研究生、科研人员及从事自动化、智能系统、多智能体协同控制等相关领的工程技术人员。; 使用场景及目标:①用于理解和实现多智能体系统在有限时间内达成一致的分布式控制方法;②为事件触发控制、分布式优化、协同控制等课题提供算法设计与仿真验证的技术参考;③支撑科研项目开发、学术论文复现及工程原型系统搭建; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注事件触发条件的设计逻辑与系统收敛性证明之间的关系,同时可延伸至其他应用场景进行二次开发与性能优化。
【四旋翼无人机】具备螺旋桨倾斜机构的全驱动四旋翼无人机:建模与控制研究(Matlab代码、Simulink仿真实现)内容概要:本文围绕具备螺旋桨倾斜机构的全驱动四旋翼无人机展开,重点研究其动力学建模与控制系统设计。通过Matlab代码与Simulink仿真实现,详细阐述了该类无人机的运动学与动力学模型构建过程,分析了螺旋桨倾斜机构如何提升无人机的全向机动能力与姿态控制性能,并设计相应的控制策略以实现稳定飞行与精确轨迹跟踪。文中涵盖了从系统建模、控制器设计到仿真验证的完整流程,突出了全驱动结构相较于传统四旋翼在欠驱动问题上的优势。; 适合人群:具备一定控制理论基础和Matlab/Simulink使用经验的自动化、航空航天及相关专业的研究生、科研人员或无人机开发工程师。; 使用场景及目标:①学习全驱动四旋翼无人机的动力学建模方法;②掌握基于Matlab/Simulink的无人机控制系统设计与仿真技术;③深入理解螺旋桨倾斜机构对飞行性能的影响及其控制实现;④为相关课题研究或工程开发提供可复现的技术参考与代码支持。; 阅读建议:建议读者结合提供的Matlab代码与Simulink模型,逐步跟进文档中的建模与控制设计步骤,动手实践仿真过程,以加深对全驱动无人机控制原理的理解,并可根据实际需求对模型与控制器进行修改与优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值