自己寫的 頁面收集、驗證、發送插件
目前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]