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.
text/web/lay/modules/form.js

110 lines
6.8 KiB

/** layui-v2.5.6 MIT License By https://www.layui.com */
layui.define("layer", function(e) {
"use strict";
var t = layui.$, // 获取 layui 的 jQuery 对象
i = layui.layer, // 获取 layui 的 layer 模块,用于弹出层
a = layui.hint(), // 获取提示信息模块
n = layui.device(), // 获取设备信息
l = "form", // 表单模块
r = ".layui-form", // 表单的选择器
s = "layui-this", // 当前选中元素的 class
o = "layui-hide", // 隐藏元素的 class
c = "layui-disabled", // 禁用元素的 class
// 定义表单验证模块
u = function() {
this.config = {
verify: {
required: [/[\S]+/, "必填项不能为空"], // 必填项验证
phone: [/^1\d{10}$/, "请输入正确的手机号"], // 手机号格式验证
email: [/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/, "邮箱格式不正确"], // 邮箱格式验证
url: [/(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/, "链接格式不正确"], // URL 格式验证
number: function(e) {
if (!e || isNaN(e)) return "只能填写数字"; // 数字验证
},
date: [/^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/, "日期格式不正确"], // 日期格式验证
identity: [/(^\d{15}$)|(^\d{17}(x|X|\d)$)/, "请输入正确的身份证号"] // 身份证号验证
}
};
};
// 设置配置项
u.prototype.set = function(e) {
var i = this;
return t.extend(!0, i.config, e), i;
};
// 设置验证规则
u.prototype.verify = function(e) {
var i = this;
return t.extend(!0, i.config.verify, e), i;
};
// 绑定事件
u.prototype.on = function(e, t) {
return layui.onevent.call(this, l, e, t);
};
// 获取表单的值
u.prototype.val = function(e, i) {
var a = this,
n = t(r + '[lay-filter="' + e + '"]');
return n.each(function(e, a) {
var n = t(this);
layui.each(i, function(e, t) {
var i, a = n.find('[name="' + e + '"]');
a[0] && (i = a[0].type, "checkbox" === i ? a[0].checked = t : "radio" === i ? a.each(function() { this.value == t && (this.checked = !0) }) : a.val(t))
});
}), f.render(null, e), a.getValue(e);
};
// 获取表单值
u.prototype.getValue = function(e, i) {
i = i || t(r + '[lay-filter="' + e + '"]').eq(0);
var a = {}, n = {}, l = i.find("input,select,textarea");
return layui.each(l, function(e, t) {
if (t.name = (t.name || "").replace(/^\s*|\s*&/, ""), t.name) {
if (/^.*\[\]$/.test(t.name)) {
var i = t.name.match(/^(.*)\[\]$/g)[0];
a[i] = 0 | a[i], t.name = t.name.replace(/^(.*)\[\]$/, "$1[" + a[i]++ + "]")
}
/^checkbox|radio$/.test(t.type) && !t.checked || (n[t.name] = t.value)
}
}), n;
};
// 渲染表单元素
u.prototype.render = function(e, i) {
var n = this, u = t(r + (function() { return i ? '[lay-filter="' + i + '"]' : "" }()));
var d = {
// 渲染 select 元素
select: function() {
var e, i = "请选择", a = "layui-form-select", n = "layui-select-title", r = "layui-select-none", d = "", f = u.find("select"),
v = function(i, l) { t(i.target).parent().hasClass(n) && !l || (t("." + a).removeClass(a + "ed " + a + "up"), e && d && e.val(d)), e = null },
y = function(i, u, f) {
var y, p = t(this), m = i.find("." + n), k = m.find("input"), g = i.find("dl"), x = g.children("dd"), b = this.selectedIndex;
if (!u) {
var C = function() {
var e = i.offset().top + i.outerHeight() + 5 - h.scrollTop(), t = g.outerHeight();
b = p[0].selectedIndex, i.addClass(a + "ed"), x.removeClass(o), y = null, x.eq(b).addClass(s).siblings().removeClass(s), e + t > h.height() && e >= t && i.addClass(a + "up"), T()
};
var w = function(e) { i.removeClass(a + "ed " + a + "up"), k.blur(), y = null, e || $(k.val(), function(e) { var i = p[0].selectedIndex; e && (d = t(p[0].options[i]).html(), 0 === i && d === k.attr("placeholder") && (d = ""), k.val(d || "")) }) },
T = function() { var e = g.children("dd." + s); if (e[0]) { var t = e.position().top, i = g.height(), a = e.height(); t > i && g.scrollTop(t + g.scrollTop() - i + a - 5), t < 0 && g.scrollTop(t + g.scrollTop() - 5) } };
m.on("click", function(e) { i.hasClass(a + "ed") ? w() : (v(e, !0), C()), g.find("." + r).remove() }), m.find(".layui-edge").on("click", function() { k.focus() }), k.on("keyup", function(e) { var t = e.keyCode; 9 === t && C() }).on("keydown", function(e) {
var t = e.keyCode; 9 === t && w(); var i = function(t, a) {
var n, l; e.preventDefault();
var r = function() {
var e = g.children("dd." + s);
if (g.children("dd." + o)[0] && "next" === t) { var i = g.children("dd:not(." + o + ",." + c + ")"), n = i.eq(0).index(); if (n >= 0 && n < e.index() && !i.hasClass(s)) return i.eq(0).prev()[0] ? i.eq(0).prev() : g.children(":last") } return a && a[0] ? a : y && y[0] ? y : e }();
return l = r[t](), n = r[t]("dd:not(." + o + ")"), l[0] ? (y = r[t](), n[0] && !n.hasClass(c) || !y[0] ? (n.addClass(s).siblings().removeClass(s), void T()) : i(t, y)) : y = null };
38 === t && i("prev"), 40 === t && i("next"), 13 === t && (e.preventDefault(), g.children("dd." + s).trigger("click"))
});
var $ = function(e, i, a) {
var n = 0; layui.each(x, function() {
var i = t(this), l = i.text(), r = l.indexOf(e) === -1;
("" === e || "blur" === a ? e !== l : r) && n++, "keyup" === a && i[r ? "addClass" : "removeClass"](o)
});
var l = n === x.length; return i(l), l
};
var q = function(e) { var t = this.value, i = e.keyCode; return 9 !== i && 13 !== i && 37 !== i && 38 !== i && 39 !== i && 40 !== i && ($(t, function(e) { e ? g.find("." + r)[0] || g.append('<p class="' + r + '">无匹配项</