zoukankan      html  css  js  c++  java
  • jQuery插件

    项目中开发到一半,需要实现表格行内编辑的功能,所以开发了这样一个jQuery的插件,目标是插件不变动已有的表格结构,完全实现插件化,随时安装及卸载。目前1.0还未能实现数据提交到后台保存,待1.1版本更新。

    效果图

    展示Demo  

    核心源码下载

    表格HTML

    <table class="tab_list" cellspacing="0" cellspadding="0" width="800" style="margin: 20px;">
            <tr>
                <th data-name="field_text">单行文本</th>
                <th data-name="field_date">日期</th>
                <th data-name="field_chk">单选</th>
                <th data-name="field_mulichk">多选</th>
                <th data-name="field_textarea">多行文本</th>
                <th>不参与编辑</th>
            </tr>
            <tr>
                <td>名称</td>
                <td>10/09/2013</td>
                <td></td>
                <td>骨角牙,塑料,墨</td>
                <td>111</td>
                <td>111</td>
            </tr>
            <tr>
                <td>222</td>
                <td>11/09/2013</td>
                <td></td>
                <td>化学纤维</td>
                <td>222</td>
                <td>222</td>
            </tr>
        </table>

    引入库文件 :

    <script src="lib/jQuery.tableEditor.js"></script> 
    <link href="lib/plugins.css" rel="stylesheet" />

    jQuery插件方法 $().tableEditor (表格进入编辑模式):

    $("table").tableEditor(option)

    参数 option 类型为 Object 时:

    包含选项设置

    isAddChk 默认true 是否为每行添加checkbox
    isFirstHead 默认true 首行是否为列头(过滤首行)
    isLastFoot 默认false 尾行是否为列尾(过滤尾行)
    isAutoSaveChange 默认true 退出行编辑状态时,自动保存数据 (false时将显示保存和取消按钮)
    ctypeControls Object 对应ctype创建控件的对象,可在创建时传递自定义的扩展控件或调用setDefault进行默认全局设置

    {
        "text":textControl,
        "datepicker":datepickerControl
        ...
    }
    

    columns Arrary ,说明: 包含对应行编辑时每列显示配置数组

    列配置参数:

    ctype : 控件类型(可填写默认自带的控件 text,textarea,datepicker 或自己扩展的控件对象)
    name : 保存时列对应的属性名(可设置在首行 td|th 的data-name中,自动获取)
    getVal : 进入编辑状态时,控件获取值的方法 (可选)
    getTxt : 退出编辑状态时,控件获取显示文本的方法(可选)
    ctypeArgs : 创建控件时传递的参数(可选),可以为数组 [a,b] ,数组代表控件构造函数的多个参数, control(ev,a,b)

    参数 option 类型为 String 时:

    option 值为 :

    • destroy - 销毁插件
    • 待更新
    $(".tab_list").tableEditor("destroy");

    方法 $.tableEditor.setDefault(配置默认属性):

    $.tableEditor.setDefault(option)

    参数 option Object:

    新的默认选项设置

    $.tableEditor.setDefault({
        isAutoSaveChange:false,
        ctypeControls:{
            "text":customTextControl,
            "fileupload":customFileUploadControl
        }
    })

    创建自定义的编辑控件

    //自定义扩展 复形单选及多选控件
    //构造函数,默认传递首参数 { ui: 控件所在td , name:控件对应属性名, val:列文本或调用option.columns[n].getVal方法计算后的值   } 及ctypeArgs定义参数
    function richSelectControl(ev, option) {
        this.$container = ev.ui;
        var txt = ev.val;
        var value = this.searchCode(option.data, txt);
        this.$input = $("<input name="" + ev.name + "" value="" + value + "" type="hidden"/>");
        this.option = option;
    }
    //呈现时调用,呈现控件 (必须实现)
    richSelectControl.prototype.render = function () {
        this.$container.append(this.$input);
        this.$input.RichTreeSelect(this.option);
    }
    //退出编辑时调用,获取显示文本 (必须实现)              
    richSelectControl.prototype.getTxt = function () {
        var rc = this.$input.RichTreeSelect("pointer");
        return rc.getValueTxt();
    }
    //保存编辑时调用 ,获取控件值  (必须实现)   
    richSelectControl.prototype.getVal = function () {
        return this.$input.val();
    }
    //进入编辑时调用,获取触发焦点 (必须实现)
    richSelectControl.prototype.focus = function () {
        this.$input.focus();
    }
    //退出编辑时调用,销毁对象 (必须实现)
    richSelectControl.prototype.destroy = function () {
        var rc = this.$input.RichTreeSelect("pointer");
        rc.destroy();
    }
    //递归由文本反查值
    richSelectControl.prototype.searchCode = function (list, txt) {
        var val = "";
        $.each(list, function () {
            if (this.title == txt) {
                val = this.data.Code;
                return;
            }
            else if (this.list instanceof Array) {
                val += searchCode(this.list, txt);
            }
        });
        return val;
    }
                 
    本页代码:
     //自定义扩展 复形单选及多选控件
        //构造函数,默认传递首参数 { ui: 控件所在td , name:控件对应属性名, val:列文本或调用option.columns[n].getVal方法计算后的值   } 及ctypeArgs定义参数
        function richSelectControl(ev, option) {
            this.$container = ev.ui;
            var txt = ev.val;
            var value = this.txtToVal(txt);
            this.$input = $("<input name="" + ev.name + "" value="" + value + "" type="hidden"/>");
            this.option = option;
        }
        //呈现时调用,呈现控件
        richSelectControl.prototype.render = function () {
            this.$container.append(this.$input);
            this.$input.RichTreeSelect(this.option);
        }
        //退出编辑时调用,获取显示文本              
        richSelectControl.prototype.getTxt = function () {
            var rc = this.$input.RichTreeSelect("pointer");
            return rc.getValueTxt();
        }
        //保存编辑时调用 ,获取控件值     
        richSelectControl.prototype.getVal = function () {
            return this.$input.val();
        }
        //进入编辑时调用,获取触发焦点  
        richSelectControl.prototype.focus = function () {
            this.$input.focus();
        }
        //退出编辑时调用,销毁对象
        richSelectControl.prototype.destroy = function () {
            var rc = this.$input.RichTreeSelect("pointer");
            rc.destroy();
        }
        //递归由文本反查值
        richSelectControl.prototype.searchCode = function (list, txt) {
            var val = "";
            var self = this;
            $.each(list, function () {
                if (this.title == txt) {
                    val = this.data.Code;
                    return;
                }
                else if (this.list instanceof Array) {
                    val += self.searchCode(this.list, txt);
                }
            });
            return val;
        }
        richSelectControl.prototype.txtToVal = function (txt) {
            var txt = $.trim(txt);
            var val = "";
            var self = this;
            if (txt != "") {
                var arr = txt.split(",");
                $.each(arr, function (i, n) {
                    var code = self.searchCode(listdata, this);
                    if (code != "") {
                        val += code + ",";
                    }
                });
                if (val.length > 0) {
                    val = val.substring(0, val.length - 1);
                }
            }
            return val;
        }
        //配置默认属性
        $.tableEditor.setDefault({
            isAutoSaveChange: false,
            ctypeControls: {
                "richselect": richSelectControl
            }
        });
    
        var option = {
            columns: [
                { ctype: "text" },
                { ctype: "datepicker" },
                {
                    ctype: "richselect",
                    getVal: function ($td) {
                        return $td.text();
                    },
                    getTxt: function ($td) {
                        return $td.getEditorCtl().getTxt();
                    },
                    ctypeArgs: { valueMember: "Code", selectType: 0, data: listdata, expandLevel: "end" }
                },
                {
                    ctype: "richselect",
                    ctypeArgs: { valueMember: "Code", selectType: 1, data: listdata, expandLevel: "end" }
                },
                { ctype: "textarea", ctypeArgs: { css: {  50 } } }
            ]
        }
    
        $("#loadPlugin").click(function () {
            $(".tab_list").tableEditor(option);
        });
    
        $("#unloadPlugin").click(function () {
            $(".tab_list").tableEditor("destroy");
        });
  • 相关阅读:
    病毒写法,资源的释放.
    MinHook库的使用 64位下,过滤LoadLibraryExW
    系统权限远程线程注入到Explorer.exe
    【Unity】4.5 树木创建器
    【Unity】4.4 添加角色控制器
    【Unity】4.3 地形编辑器
    【Unity】4.2 提升开发效率的捷径--导入 Unity 5.3.4 自带的资源包
    【Unity】4.1 创建组件
    【Unity】4.0 第4章 创建基本的游戏场景
    【Unity】3.6 导入图片资源
  • 原文地址:https://www.cnblogs.com/yi-y/p/3366280.html
Copyright © 2011-2022 走看看