62 lines
1.8 KiB
JavaScript
62 lines
1.8 KiB
JavaScript
(function (root, factory) {
|
|
// 表单工具只处理跨页面通用转换,具体业务字段留在页面脚本中组织。
|
|
if (typeof module === 'object' && module.exports) {
|
|
module.exports = factory();
|
|
return;
|
|
}
|
|
|
|
root.FormUtil = factory();
|
|
})(typeof globalThis !== 'undefined' ? globalThis : window, function () {
|
|
'use strict';
|
|
|
|
function trimOrUndefined(value) {
|
|
if (value === undefined || value === null) return undefined;
|
|
|
|
var text = String(value).trim();
|
|
return text ? text : undefined;
|
|
}
|
|
|
|
function toNumberOrUndefined(value) {
|
|
var text = trimOrUndefined(value);
|
|
if (text === undefined) return undefined;
|
|
|
|
var numberValue = Number(text);
|
|
return Number.isNaN(numberValue) ? undefined : numberValue;
|
|
}
|
|
|
|
function toBoolean(value) {
|
|
if (value === true || value === false) return value;
|
|
|
|
var text = trimOrUndefined(value);
|
|
if (text === undefined) return false;
|
|
|
|
return !['0', 'false', 'off', 'no'].includes(text.toLowerCase());
|
|
}
|
|
|
|
function getControlValue(control) {
|
|
if (!control || control.disabled || !control.name) return undefined;
|
|
if (control.type === 'checkbox') return control.checked ? (control.value || 'on') : undefined;
|
|
if (control.type === 'radio') return control.checked ? control.value : undefined;
|
|
return control.value;
|
|
}
|
|
|
|
function getFormValues(form) {
|
|
var values = {};
|
|
if (!form || !form.elements) return values;
|
|
|
|
Array.prototype.forEach.call(form.elements, function (control) {
|
|
var value = getControlValue(control);
|
|
if (value !== undefined) values[control.name] = value;
|
|
});
|
|
|
|
return values;
|
|
}
|
|
|
|
return {
|
|
trimOrUndefined: trimOrUndefined,
|
|
toNumberOrUndefined: toNumberOrUndefined,
|
|
toBoolean: toBoolean,
|
|
getFormValues: getFormValues
|
|
};
|
|
});
|