前言

使用$.fn.form.defaults重写默认值对象下载该插件翻译源码

form提供了各种方法来操作执行表单字段,比如:ajax提交, load, clear等等。当提交表单的时候可以调用validate方法检查表单是否有效

源码

/**
* jQuery EasyUI 1.3.2
*
*翻译;qq 1364386878
*/
(function ($) {
//执行提交操作,该选项的参数是一个对象
function _submit(target, options) {
options = options || {};
var param = {};
if (options.onSubmit) {
if (options.onSubmit.call(target, param) == false) {
return;
}
}
var form = $(target);
if (options.url) {
form.attr("action", options.url);
}
var iframeid = "easyui_frame_" + (new Date().getTime());
var frame = $("<iframe id=" + iframeid + " name=" + iframeid + "></iframe>").attr("src",
window.ActiveXObject ? "javascript:false" : "about:blank").css(
{ position: "absolute", top: -1000, left: -1000 });
var t = form.attr("target"),
a = form.attr("action");
form.attr("target", iframeid);
var _8 = $();
try {
frame.appendTo("body");
frame.bind("load", cb);
for (var n in param) {
var f = $("<input type=\"hidden\" name=\"" + n + "\">").val(param[n]).appendTo(form);
_8 = _8.add(f);
}
form[0].submit();
}
finally {
form.attr("action", a);
t ? form.attr("target", t) : form.removeAttr("target");
_8.remove();
}
var checkCount = 10;
function cb() {
frame.unbind();
var body = $("#" + iframeid).contents().find("body");
var data = body.html();
if (data == "") {
if (--checkCount) {
setTimeout(cb, 100);
return;
}
return;
}
var ta = body.find(">textarea");
if (ta.length) {
data = ta.val();
} else {
var pre = body.find(">pre");
if (pre.length) {
data = pre.html();
}
}
if (options.success) {
options.success(data);
}
setTimeout(function () {
frame.unbind();
frame.remove();
}, 100);
};
};
//读取记录填充到表单中。数据参数可以是一个字符串或一个对象类型,如果是字符串则作为远程URL,否则作为本地记录
function _load(target, data) {
if (!$.data(target, "form")) {
$.data(target, "form", {
options: $.extend({},
$.fn.form.defaults)
});
}
var options = $.data(target, "form").options;
if (typeof data == "string") {
var param = {};
if (options.onBeforeLoad.call(target, param) == false) {
return;
}
$.ajax({
url: data,
data: param,
dataType: "json",
success: function (data) {
_load2(data);
},
error: function () {
options.onLoadError.apply(target, arguments);
}
});
} else {
_load2(data);
}
function _load2(data) {
var form = $(target);
for (var name in data) {
var val = data[name];
var rr = setChecked(name, val);
if (!rr.length) {
var f = form.find("input[numberboxName=\"" + name + "\"]");
if (f.length) {
f.numberbox("setValue", val);
} else {
$("input[name=\"" + name + "\"]", form).val(val);
$("textarea[name=\"" + name + "\"]", form).val(val);
$("select[name=\"" + name + "\"]", form).val(val);
}
}
setValue(name, val);
}
options.onLoadSuccess.call(target, data);
_validate(target);
};
//设置选中
function setChecked(name, val) {
var form = $(target);
var rr = $("input[name=\"" + name + "\"][type=radio], input[name=\"" + name + "\"][type=checkbox]", form);
$.fn.prop ? rr.prop("checked", false) : rr.attr("checked", false);
rr.each(function () {
var f = $(this);
if (f.val() == String(val)) {
$.fn.prop ? f.prop("checked", true) : f.attr("checked", true);
}
});
return rr;
};
//设置值
function setValue(name, val) {
var form = $(target);
var types = ["combobox", "combotree", "combogrid", "datetimebox", "datebox", "combo"];
var c = form.find("[comboName=\"" + name + "\"]");
if (c.length) {
for (var i = 0; i < types.length; i++) {
var type = types[i];
if (c.hasClass(type + "-f")) {
if (c[type]("options").multiple) {
c[type]("setValues", val);
} else {
c[type]("setValue", val);
}
return;
}
}
}
};
};
//清除表单数据
function _clear(target) {
$("input,select,textarea", target).each(function () {
var t = this.type,
tag = this.tagName.toLowerCase();
if (t == "text" || t == "hidden" || t == "password" || tag == "textarea") {
this.value = "";
} else {
if (t == "file") {
var file = $(this);
file.after(file.clone().val(""));
file.remove();
} else {
if (t == "checkbox" || t == "radio") {
this.checked = false;
} else {
if (tag == "select") {
this.selectedIndex = -1;
}
}
}
}
});
if ($.fn.combo) { $(".combo-f", target).combo("clear");
}
if ($.fn.combobox) {
$(".combobox-f", target).combobox("clear");
}
if ($.fn.combotree) {
$(".combotree-f", target).combotree("clear");
}
if ($.fn.combogrid) {
$(".combogrid-f", target).combogrid("clear");
}
_validate(target);
};
//重置表单数据
function _reset(target) {
target.reset();
var t = $(target); if ($.fn.combo) {
t.find(".combo-f").combo("reset");
}
if ($.fn.combobox) {
t.find(".combobox-f").combobox("reset");
}
if ($.fn.combotree) {
t.find(".combotree-f").combotree("reset");
}
if ($.fn.combogrid) {
t.find(".combogrid-f").combogrid("reset");
}
if ($.fn.spinner) {
t.find(".spinner-f").spinner("reset");
}
if ($.fn.timespinner) {
t.find(".timespinner-f").timespinner("reset");
}
if ($.fn.numberbox) {
t.find(".numberbox-f").numberbox("reset");
}
if ($.fn.numberspinner) {
t.find(".numberspinner-f").numberspinner("reset");
}
_validate(target);
};
//设置表单
function setForm(target) {
var options = $.data(target, "form").options;
var form = $(target);
form.unbind(".form").bind("submit.form", function () {
setTimeout(function () {
_submit(target, options);
}, 0);
return false;
});
};
//做表单字段验证,当所有字段都有效的时候返回true。该方法使用validatebox(验证框)插件
function _validate(target) {
if ($.fn.validatebox) {
var t = $(target);
t.find(".validatebox-text:not(:disabled)").validatebox("validate");
var valid = t.find(".validatebox-invalid");
valid.filter(":not(:disabled):first").focus();
return valid.length == 0;
}
return true;
};
//实例化form
$.fn.form = function (options, param) {
if (typeof options == "string") {
return $.fn.form.methods[options](this, param);
}
options = options || {};
return this.each(function () {
if (!$.data(this, "form")) {
$.data(this, "form", {
options: $.extend({},
$.fn.form.defaults, options)
});
}
setForm(this);
});
};
//方法
$.fn.form.methods = {
//执行提交操作,该选项的参数是一个对象
submit: function (jq, param) {
return jq.each(function () {
_submit(this, $.extend({}, $.fn.form.defaults, param || {}));
});
},
//读取记录填充到表单中。数据参数可以是一个字符串或一个对象类型,如果是字符串则作为远程URL,否则作为本地记录
load: function (jq, data) {
return jq.each(function () {
_load(this, data);
});
},
//清除表单数据
clear: function (jq) {
return jq.each(function () {
_clear(this);
});
},
//重置表单数据
reset: function (jq) {
return jq.each(function () {
_reset(this);
});
},
//表单字段验证,当所有字段都有效的时候返回true。该方法使用validatebox(验证框)插件
validate: function (jq) {
return _validate(jq[0]);
}
}; //form默认属性+事件
$.fn.form.defaults = {
url: null,//提交表单动作的URL地址
//在提交之前触发,返回false可以终止提交
onSubmit: function (param) {
return $(this).form("validate");
},
//在表单提交成功以后触发
success: function (data) {
},
//在请求加载数据之前触发。返回false可以停止该动作
onBeforeLoad: function (_30) {
},
//在表单数据加载完成后触发
onLoadSuccess: function (_31) {
},
//在表单数据加载出现错误的时候触发
onLoadError: function () {
}
};
})(jQuery);

示例代码

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Basic Form - jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../demo.css">
<script type="text/javascript" src="../../jquery-1.8.0.min.js"></script>
<script src="../../plugins2/jquery.parser.js"></script>
<script src="../../plugins2/jquery.validatebox.js"></script>
<script src="../../plugins2/jquery.linkbutton.js"></script>
<script src="../../plugins2/jquery.panel.js"></script>
<script src="../../plugins2/jquery.form.js"></script>
</head>
<body>
<h2>Basic Form</h2>
<div class="demo-info">
<div class="demo-tip icon-tip"></div>
<div>Fill the form and submit it.</div>
</div>
<div style="margin:10px 0;"></div>
<div class="easyui-panel" title="New Topic" style="width:400px">
<div style="padding:10px 0 10px 60px">
<form id="ff" method="post">
<table>
<tr>
<td>Name:</td>
<td><input class="easyui-validatebox" type="text" name="name" data-options="required:true"></input></td>
</tr>
<tr>
<td>Email:</td>
<td><input class="easyui-validatebox" type="text" name="email" data-options="required:true,validType:'email'"></input></td>
</tr>
<tr>
<td>Subject:</td>
<td><input class="easyui-validatebox" type="text" name="subject" data-options="required:true"></input></td>
</tr>
<tr>
<td>Message:</td>
<td><textarea name="message" style="height:60px;"></textarea></td>
</tr>
<tr>
<td>Language:</td>
<td>
<select class="easyui-combobox" name="language"><option value="ar">Arabic</option><option value="bg">Bulgarian</option><option value="ca">Catalan</option><option value="zh-cht">Chinese Traditional</option><option value="cs">Czech</option><option value="da">Danish</option><option value="nl">Dutch</option><option value="en" selected="selected">English</option><option value="et">Estonian</option><option value="fi">Finnish</option><option value="fr">French</option><option value="de">German</option><option value="el">Greek</option><option value="ht">Haitian Creole</option><option value="he">Hebrew</option><option value="hi">Hindi</option><option value="mww">Hmong Daw</option><option value="hu">Hungarian</option><option value="id">Indonesian</option><option value="it">Italian</option><option value="ja">Japanese</option><option value="ko">Korean</option><option value="lv">Latvian</option><option value="lt">Lithuanian</option><option value="no">Norwegian</option><option value="fa">Persian</option><option value="pl">Polish</option><option value="pt">Portuguese</option><option value="ro">Romanian</option><option value="ru">Russian</option><option value="sk">Slovak</option><option value="sl">Slovenian</option><option value="es">Spanish</option><option value="sv">Swedish</option><option value="th">Thai</option><option value="tr">Turkish</option><option value="uk">Ukrainian</option><option value="vi">Vietnamese</option></select>
</td>
</tr>
</table>
</form>
</div>
<div style="text-align:center;padding:5px">
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="submitForm()">Submit</a>
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="clearForm()">Clear</a>
</div>
</div>
<script>
function submitForm(){
$('#ff').form('submit');
}
function clearForm(){
$('#ff').form('clear');
}
</script>
</body>
</html>

插件效果

easyui源码翻译1.32--Form(表单)的更多相关文章

  1. easyui源码翻译1.32+API翻译全篇导航 (提供下载源码)

    前言 EasyUI每个组件都会有 属性.方法.事件 属性 所有的属性都定义在jQuery.fn.{plugin}.defaults里面.例如,对话框属性定义在jQuery.fn.dialog.defa ...

  2. easyui源码翻译1.32--ValidateBox(验证框)

    前言 使用$.fn.validatebox.defaults重写默认值对象.下载该插件翻译源码 validatebox(验证框)的设计目的是为了验证输入的表单字段是否有效.如果用户输入了无效的值,它将 ...

  3. easyui源码翻译1.32--datagrid(数据表格)

    前言 此前网上有easyui1.25的源码  应该算是比较老的版本  之后又经历了1.26 . 1.3. 1.31. 1.32 .1.33.1.34  1.33开始支持css3 算是又一个转折  但是 ...

  4. easyui源码翻译1.32--EasyLoader(简单加载)

    前言 扩展自$.fn.datebox.defaults,使用$.fn.datetimebox.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3. ...

  5. easyui源码翻译1.32--Layout(布局)

    前言 使用$.fn.layout.defaults重写默认值对象.下载该插件翻译源码 布局容器有5个区域:北.南.东.西和中间.中间区域面板是必须的,边缘的面板都是可选的.每个边缘区域面板都可以通过拖 ...

  6. easyui源码翻译1.32--Draggable(拖动)

    前言 使用$.fn.draggable.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:qq 1364386878 --拖动 ...

  7. easyui源码翻译1.32--Droppable(放置)

    前言 使用$.fn.droppable.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:lbq --放置 拉伸 */ (fun ...

  8. easyui源码翻译1.32--Resizable(调整大小)

    前言 使用$.fn.resizable.defaults重写默认值对象 下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:qq 1364386878 Resiz ...

  9. easyui源码翻译1.32--Pagination(分页)

    前言 使用$.fn.pagination.defaults重写默认值对象下载该插件翻译源码 该分页控件允许用户导航页面的数据.它支持页面导航和页面长度选择的选项设置.用户可以在分页控件上添加自定义按钮 ...

随机推荐

  1. NC参照查那个表

    select * from bd_refinfo where name like '%人员工作记录全职树(行政树)%';select * from bd_refinfo where name like ...

  2. 禁止button响应回车(.net页面)

    1. 深层次来说这不是 ASP.NET 的问题, 而是 html form 的 submit 按钮就是如何设计的. 当你的光标焦点进入某个表单元素的时候,会激活该表单中第一个(流布局顺从左到右,从上至 ...

  3. ios常用的一些类库

    在网上收集到的 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址:https:/ ...

  4. CSS text-indent

    text-indent 属性规定文本块中首行文本的缩进. 一个作用就是首行文本缩进,一般的文本都是首行缩进两个字符,这里就可以使用text-indent { text-indent: 2em; } 另 ...

  5. WPF 程序中启动和关闭外部.exe程序

    当需要在WPF程序启动时,启动另一外部程序(.exe程序)时,可以按照下面的例子来: C#后台代码如下: using System; using System.Collections.Generic; ...

  6. 简单模拟java动态动态代理机制的底层实现原理

    在网上学习了马士兵老师的设计模式视屏,过程中也有认真的做相应的笔记.在次分享我的一些成果,方便大家的进一步学习. 1.接口  } 2.被代理的对象 public class Tank implemen ...

  7. php 二维转一维

    Array(    [0] => Array        (            [salesorderid] => 10001            [createdtime] =& ...

  8. Win7 钩子 超时 失效

    这段时间在程序中,使用了全局钩子,但是在测试时发现,会偶尔失效. 在网上搜索到了这两篇文章: VC底层钩子程序在Win7/Vista下无效 Hooking problem in Windows 7 这 ...

  9. mouseover与mouseenter与mousemove的区别mouseout与mouseleave的区别

    <html> <head> <title></title> </head> <body> <p> 当鼠标进入div1 ...

  10. memcached全面剖析--3

    memcached的删除机制和发展方向 下面是<memcached全面剖析>的第三部分. 发表日:2008/7/16 作者:前坂徹(Toru Maesaka) 原文链接:http://gi ...