You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
SOP/sop-admin/sop-admin-front/assets/lib/layuiext/Form.js

180 lines
5.0 KiB

/**
* 表单插件,使用方法:
* var myform = layui.Form('formId');
* myform.setData({...})
*
* var data = myform.getData();
*
* var name = myform.getData('name')
*/
layui.define(function (exports) {
/**
* form = new Form('formId');
* @param formId
* @constructor
*/
var Form = function (formId) {
this.$form = $('#' + formId);
this.parseForm(this.$form);
}
Form.prototype = {
fire: function (eventName, data) {
var handler = this['on' + eventName];
handler && handler(data);
}
, opt: function (attr) {
return this[attr];
}
/**
* @private
*/
, parseForm: function ($form) {
var that = this;
this.form = $form[0];
this.$els = $form.find('input,select,textarea');
}
/**
* 同load(data)
*/
, setData: function (data) {
this.loadData(data);
}
/**
* @private
*/
, loadData: function (data) {
this.reset();
for (var name in data) {
var val = data[name];
var $el = this.$form.find('[name="' + name + '"]');
$el.each(function () {
var _$el = $(this);
if (_$el.is(':radio') || _$el.is(':checkbox')) {
_$el.prop('checked', false);
var elVal = _$el.val();
if ($.isArray(val)) {
for (var i = 0, len = val.length; i < len; i++) {
if (elVal == val[i]) {
_$el.prop('checked', true);
}
}
} else {
_$el.prop('checked', elVal == val);
}
} else {
_$el.val(val);
}
});
}
}
/**
* 清除表单中的值,清除错误信息
*/
, clear: function () {
this.$els.each(function () {
var _$el = $(this);
if (_$el.is(':radio') || _$el.is(':checkbox')) {
this.checked = false;
} else {
this.value = '';
}
var msg = _$el.data('msg');
if (msg) {
msg.text('');
}
});
}
/**
* 重置表单
*/
, reset: function () {
var form = this.form;
if (form && form.reset) {
form.reset();
} else {
this.clear();
}
}
/**
* 获取表单数据,如果有fieldName参数则返回表单对应的值<br>
* var id = form.getData('id') 等同于 var id = form.getData().id;
* @param {String} fieldName
* @return {Object} 返回JSON对象,如果有fieldName参数,则返回对应的值
*/
, getData: function (fieldName) {
var that = this;
var data = {};
this.$els.each(function () {
var value = that._getInputVal($(this));
if (value) {
var name = this.name;
var dataValue = data[name];
if (dataValue) {
if ($.isArray(dataValue)) {
dataValue.push(value);
} else {
data[name] = [dataValue, value];
}
} else {
data[name] = value;
}
}
});
if (typeof fieldName === 'string') {
return data[fieldName];
}
return data;
}
, getFormData: function ($form) {
var data = {};
var dataArr = $form.serializeArray();
for (var i = 0, len = dataArr.length; i < len; i++) {
var item = dataArr[i];
var name = item.name;
var itemValue = item.value;
var dataValue = data[name];
if (dataValue) {
if ($.isArray(dataValue)) {
dataValue.push(itemValue);
} else {
data[name] = [dataValue, itemValue];
}
} else {
data[name] = itemValue;
}
}
return data;
}
, _getInputVal: function ($input) {
if ($input.is(":radio") || $input.is(":checkbox")) {
if ($input.is(':checked')) {
return $input.val();
}
} else {
return $input.val();
}
}
}
exports('Form', function (formId) {
return new Form(formId);
});
});