首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

自各儿寫的 頁面收集、驗證、發送插件

2013-07-20 
自己寫的 頁面收集、驗證、發送插件目前RIA项目盛行,JQUERY 的应用也越来越多,对于一般信息管理系统来说,非

自己寫的 頁面收集、驗證、發送插件
目前RIA项目盛行,JQUERY 的应用也越来越多,

对于一般信息管理系统来说,非常多处理到页面的收发(取值,赋值)操作。

常用的处理方式是,自己定义变量来接受:var val = $("#id").val()..等

如果此类页面多了,非常的不便利,而且不好统一管理。

针对以上问题,自己写了一个,页面收发插件,代码很少,完全可以看得懂,应用到几个项目,确实非常好用,包含Team裡面的其他人员。

如果在程序服务端,做好接受的方法,那就更加方便,比如 JAVA JSON TO CLASS,NET JSON To List,具体我有几个项目都有搭配后台的实例,有需要的可以留言,发送源代码给你(JAVA,.NET 都有)

发布出来的意思是,希望这个插件能确实给你带来帮助,也希望这个插件能够得到更加多的精进


附档包含实例,直接瀏览器打开就可以测试

主明细取值的操作,例子没有实现,不过看看源代码 ,应该自己就会了。

其实最主要的还是要搭配服务端,所以服务端的接口定义好,会非常便捷。


插件源碼:


/*
頁面元素收發插件
Create by alan
vision:1.1
update:
1. 加入隐含data值获取
2. 加入表单验证控制,提示,效果
3. 加入頁面清空重置
4. 加入取明細資料

物件元素支援類型:text,radio,select,checkbox,textarea
*/
(function ($) {
    $.extend($.fn,
{
    //入口
    MyForm: function (options) {
        //傳入參數定義
        var op = $.extend({ type: "get",                     //操作類型:(get)取值,(set)賦值,(reset)重置清空
            datatype: "json",              //數據類型:(text)字符串,(json)JSON,(array)數組
            data: null,                      //傳入數據:用於賦值,可為:Text、JSON、Array
            model: "main",                   //模式:(main)主檔模式 (item)明細檔模式
            query: "[isfield='true']",      //選擇器過濾條件
            itemquery: "tr[rowitem='true']", //明細檔選擇器過濾條件
            alert: null                       //信息提示方法
        },                 //執行結果
                       options);

        //返回JSON定義
        var retdata = { formcheck: true, success: false, message: "", data: [] };

        var $this = $(this);

        //主檔模式
        if (op.model == "main") {
            var fields = $(op.query, $this);
            if (op.type == "get") {
                fields.removeClass("error");
                retdata = fields.GetFields(op, retdata, 0);
            }
            else if (op.type == "set") {
                retdata = fields.SetFields(op, retdata);
            }
            else if (op.type == "reset") {
                fields.ResetFields();
            }
        }
        else {
            var items = $(op.itemquery, $this);
            items.each(function (i, o) {
                var fields = $(op.query, this);
                if (op.type == "get") {
                    fields.removeClass("error");
                    retdata = fields.GetFields(op, retdata, i);
                }
                else if (op.type == "set") {
                    retdata = fields.SetFields(op, retdata);
                }
                else if (op.type == "reset") {
                    fields.ResetFields();
                }
            });
        }

        //回調函數          
        if (op.fn != null)
            op.fn.apply(this, [retdata]);

        if (op.datatype == "text")
            return JSON.stringify(retdata);
        return retdata;
    },
    GetFields: function (op, retdata, i) //取值入口
    {
        var data = {};
        var arr = new Array();
        $(this).each(function () {
            var val = $(this).GetVal();
            data[$(this).attr("fieldname")] = val;
            arr.push(val);

            retdata = $(this).Check(op, retdata, val);
        });
        if (op.datatype == "array")
            retdata.data[i] = arr;
        else
            retdata.data[i] = data;
        return retdata
    },
    SetFields: function (op, retdata) //賦值入口
    {
        if (op.data == null) {
            retdata.message = "來源資料為null";
            return;
        }
        var jsondata = null;
        if (op.data[0] != null && op.data[0] != "undefined")
            jsondata = op.data[0];
        else
            jsondata = op.data;

        var val;
        $(this).each(function (i) {
            if (op.datatype == "array")
                val = op.data[i]
            else if (op.datatype == "json")
                val = $.trim(jsondata[$(this).attr("fieldname")]);
            else
                retdata.message = "没有定义数据类型";
            $(this).SetVal(val);
        });
        retdata.success = true;
        return retdata;
    },
    ResetFields: function () //重置頁面數據
    {
        $(this).each(function (i) {
            $(this).ClearVal();
        });
    },
    Check: function (op, retdata, val) //form表單驗證
    {
        if ($(this).hasClass("required")) //判斷為空
        {
            if ($.trim(val).length == 0) {
                $(this).addClass("error");
                retdata.formcheck = false;
                retdata.message = "'请确认带 * 号的栏位都有输入內容 !";
                if (op.alert != null) {
                    op.alert.apply(this, ["请确认带 * 号的栏位都有输入內容 !"]);
                }
            }
        }
        if ($(this).hasClass("num")) //判斷數字類型
        {
            var ckQty = /^(([1-9]\d*)|0)(\.)?(\d{1,2})?$/;
            if (!ckQty.test(val)) {
                $(this).addClass("error");
                retdata.formcheck = false;
                retdata.message = "'请输入正确的数字类型 !";
                if (op.alert != null) {
                    op.alert.apply(this, ["请输入正确的数字类型 !"]);
                }
            }
        }
        return retdata;
    },
    GetVal: function ()  //物件元素取值
    {
        var fieldval = "";
        var $this = $(this);
        if ($this.is("input")) {
            if ($this.attr("type") == "text") {
                fieldval = $this.val();
            }
            else if ($this.attr("type") == "radio") {
                if ($this.prop("checked")) {
                    fieldval = $this.attr("value");
                }
            }
            else if ($this.attr("type") == "checkbox") {
                if ($this.prop("checked")) {
                    fieldval = $this.attr("checkedvla");
                }
                else {
                    fieldval = $this.attr("uncheckedvla");
                }
            }
            else {
                fieldval = $this.val();
            }
        }
        else if ($this.is("select")) {
            if ($this.attr("datatype") == "text") {
                fieldval = $this.find('option:selected').text();
            }
            else {
                fieldval = $this.val();
            }
        }
        else {
            fieldval = $this.val();
        }
        if (typeof ($this.attr("isdata")) != typeof (undefined)) {
            fieldval = $this.data($this.attr("isdata")); //取隐藏data值
        }
        return fieldval;
    },
    SetVal: function (keyvalue) //物件元素賦值
    {
        $this = $(this);
        if ($this.is("input")) {
            if ($this.attr("type") == "text")
                $this.val(keyvalue);
            else if ($this.attr("type") == "radio") {
                if ($this.attr("value") == keyvalue)
                    $this.attr("checked", true);
            }
            else if ($this.attr("type") == "checkbox") {
                if ($this.attr("checkedvla") == keyvalue)
                    $this.attr("checked", true);
            }
            else
                $this.val(keyvalue);
        }
        else if ($this.is("select")) {
            if ($this.attr("datatype") == "text")
                $this.find("option").text(keyvalue);
            else
                $this.val(keyvalue);
        }
        else
            $this.val(keyvalue);
    },
    ClearVal: function () {
        $this = $(this);
        if ($this.is("input")) {
            if ($this.attr("type") == "text") {
                $this.val('');
            }
            else if ($this.attr("type") == "radio" || $this.attr("type") == "checkbox") {
                $this.attr("checked", false);
            }
            else {
                $this.val('');
            }
        }
        else if ($this.is("select")) {
            $this.find("option").eq(0).attr("selected", 'selected');
        }
        else {
            $this.val('');
        }
        if (typeof ($this.attr("isdata")) != typeof (undefined)) {
            $this.data($this.attr("isdata"), ''); //清楚隐藏data值
        }
    }
});
})(jQuery);



取值

var data = $("#master").MyForm();


賦值
$("#master").MyForm({ type: "set", query: "[isfield]", data: { Text1: "1111", Text2: "2222", Select: "select_2", CheckBox: "Y", Radio: "3", TextData: "341", TextArea: "ABCDEFG"} });


重置
$("#master").MyForm({ type: "reset", query: "[isfield]" });


表单验证
var data = $("#master").MyForm();            if (data.formcheck) {                alert(JSON.stringify(data));                alert(JSON.stringify(data.data));            }            else                alert(data.message);code] 

热点排行