`
javacoo
  • 浏览: 65856 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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);

0
0
分享到:
评论

相关推荐

    基于Ext2的日历控件和IP地址输入控件.zip

    "基于Ext2的日历控件和IP地址输入控件"是一个针对这个目标的解决方案。Ext2是一个JavaScript库,它提供了丰富的用户界面组件,使得开发者能够构建复杂的、交互性强的Web应用程序。下面将详细解释这两个控件及其相关...

    extjs控件列表

    ### ExtJS控件详解 #### 基本组件 **Ext.Button** - **描述**: 提供了一种标准的用户交互方式,通常用于触发特定事件或功能。 - **用途**: 创建按钮,可以设置图标、文本、工具提示等。 **Ext.SplitButton** - **...

    精通JS脚本之ExtJS框架.part1.rar

    7.2.2 多行文本输入控件Ext.form.TextArea 7.2.3 单选框 7.2.4 复选框 7.2.5 下拉列表框 7.2.6 日期输入控件Ext.form.DateField 7.2.7 在线编辑器Ext.form.HtmlEditor 7.3 ExtJS表单组件的综合应用 第8章 ...

    Ext中文手册

    - **字段创建**:添加输入字段、选择器等表单控件。 - **数据绑定**:实现表单与数据源之间的双向绑定。 #### 16. **EXT中的继承** - **继承方式**:介绍Ext中实现继承的具体方式。 - **优点**:通过继承可以避免...

    精通JS脚本之ExtJS框架.part2.rar

    7.2.2 多行文本输入控件Ext.form.TextArea 7.2.3 单选框 7.2.4 复选框 7.2.5 下拉列表框 7.2.6 日期输入控件Ext.form.DateField 7.2.7 在线编辑器Ext.form.HtmlEditor 7.3 ExtJS表单组件的综合应用 第8章 ...

    ExtJs xtype一览

    - **`editor` (Ext.Editor)**: 编辑器组件,用于编辑特定类型的控件(如文本框)。 - **`dataview` (Ext.DataView)**: 数据视图组件,用于显示和操作数据集合。 - **`listview` (Ext.ListView)**: 列表视图组件,...

    PHP实现文件上传与下载

    需要构建一个带有文件输入字段的HTML表单,其`&lt;form&gt;`标签的`action`属性设置为处理文件上传的PHP脚本文件(如`doupload.php`),`enctype`属性应设置为`multipart/form-data`,这是因为`multipart/form-data`可以将...

Global site tag (gtag.js) - Google Analytics