form.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. /** layui-v2.4.3 MIT License By https://www.layui.com */ ;
  2. layui.define("layer", function (e) {
  3. "use strict";
  4. var i = layui.$,
  5. t = layui.layer,
  6. a = layui.hint(),
  7. n = layui.device(),
  8. l = "form",
  9. r = ".layui-form",
  10. s = "layui-this",
  11. o = "layui-hide",
  12. c = "layui-disabled",
  13. u = function () {
  14. this.config = {
  15. verify: {
  16. required: [/[\S]+/, "必填项不能为空"],
  17. phone: [/^1\d{10}$/, "请输入正确的手机号"],
  18. email: [/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/, "邮箱格式不正确"],
  19. url: [/(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/, "链接格式不正确"],
  20. number: function (e) {
  21. if (!e || isNaN(e)) return "只能填写数字"
  22. },
  23. date: [/^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/, "日期格式不正确"],
  24. identity: [/(^\d{15}$)|(^\d{17}(x|X|\d)$)/, "请输入正确的身份证号"]
  25. }
  26. }
  27. };
  28. u.prototype.set = function (e) {
  29. var t = this;
  30. return i.extend(!0, t.config, e), t
  31. }, u.prototype.verify = function (e) {
  32. var t = this;
  33. return i.extend(!0, t.config.verify, e), t
  34. }, u.prototype.on = function (e, i) {
  35. return layui.onevent.call(this, l, e, i)
  36. }, u.prototype.val = function (e, t) {
  37. var a = i(r + '[lay-filter="' + e + '"]');
  38. a.each(function (e, a) {
  39. var n = i(this);
  40. layui.each(t, function (e, i) {
  41. var t, a = n.find('[name="' + e + '"]');
  42. a[0] && (t = a[0].type, "checkbox" === t ? a[0].checked = i : "radio" === t ? a.each(function () {
  43. this.value === i && (this.checked = !0)
  44. }) : a.val(i))
  45. })
  46. }), f.render(null, e)
  47. }, u.prototype.render = function (e, t) {
  48. var n = this,
  49. u = i(r + function () {
  50. return t ? '[lay-filter="' + t + '"]' : ""
  51. }()),
  52. d = {
  53. select: function () {
  54. var e, t = "请选择",
  55. a = "layui-form-select",
  56. n = "layui-select-title",
  57. r = "layui-select-none",
  58. d = "",
  59. f = u.find("select"),
  60. v = function (t, l) {
  61. i(t.target).parent().hasClass(n) && !l || (i("." + a).removeClass(a + "ed " + a + "up"), e && d && e.val(d)), e = null
  62. },
  63. y = function (t, u, f) {
  64. var y, p = i(this),
  65. m = t.find("." + n),
  66. k = m.find("input"),
  67. x = t.find("dl"),
  68. g = x.children("dd"),
  69. b = this.selectedIndex;
  70. if (!u) {
  71. var C = function () {
  72. var e = t.offset().top + t.outerHeight() + 5 - h.scrollTop(),
  73. i = x.outerHeight();
  74. b = p[0].selectedIndex, t.addClass(a + "ed"), g.removeClass(o), y = null, g.eq(b).addClass(s).siblings().removeClass(s), e + i > h.height() && e >= i && t.addClass(a + "up"), $()
  75. },
  76. w = function (e) {
  77. t.removeClass(a + "ed " + a + "up"), k.blur(), y = null, e || T(k.val(), function (e) {
  78. e && (d = x.find("." + s).html(), k && k.val(d))
  79. })
  80. },
  81. $ = function () {
  82. var e = x.children("dd." + s);
  83. if (e[0]) {
  84. var i = e.position().top,
  85. t = x.height(),
  86. a = e.height();
  87. i > t && x.scrollTop(i + x.scrollTop() - t + a - 5), i < 0 && x.scrollTop(i + x.scrollTop() - 5)
  88. }
  89. };
  90. m.on("click", function (e) {
  91. t.hasClass(a + "ed") ? w() : (v(e, !0), C()), x.find("." + r).remove()
  92. }), m.find(".layui-edge").on("click", function () {
  93. k.focus()
  94. }), k.on("keyup", function (e) {
  95. var i = e.keyCode;
  96. 9 === i && C()
  97. }).on("keydown", function (e) {
  98. var i = e.keyCode;
  99. 9 === i && w();
  100. var t = function (i, a) {
  101. var n, l;
  102. e.preventDefault();
  103. var r = function () {
  104. var e = x.children("dd." + s);
  105. if (x.children("dd." + o)[0] && "next" === i) {
  106. var t = x.children("dd:not(." + o + ",." + c + ")"),
  107. n = t.eq(0).index();
  108. if (n >= 0 && n < e.index() && !t.hasClass(s)) return t.eq(0).prev()[0] ? t.eq(0).prev() : x.children(":last")
  109. }
  110. return a && a[0] ? a : y && y[0] ? y : e
  111. }();
  112. return l = r[i](), n = r[i]("dd:not(." + o + ")"), l[0] ? (y = r[i](), n[0] && !n.hasClass(c) || !y[0] ? (n.addClass(s).siblings().removeClass(s), void $()) : t(i, y)) : y = null
  113. };
  114. 38 === i && t("prev"), 40 === i && t("next"), 13 === i && (e.preventDefault(), x.children("dd." + s).trigger("click"))
  115. });
  116. var T = function (e, t, a) {
  117. var n = 0;
  118. layui.each(g, function () {
  119. var t = i(this),
  120. l = t.text(),
  121. r = l.indexOf(e) === -1;
  122. ("" === e || "blur" === a ? e !== l : r) && n++, "keyup" === a && t[r ? "addClass" : "removeClass"](o)
  123. });
  124. var l = n === g.length;
  125. return t(l), l
  126. },
  127. j = function (e) {
  128. var i = this.value,
  129. t = e.keyCode;
  130. return 9 !== t && 13 !== t && 37 !== t && 38 !== t && 39 !== t && 40 !== t && (T(i, function (e) {
  131. e ? x.find("." + r)[0] || x.append('<p class="' + r + '">无匹配项</p>') : x.find("." + r).remove()
  132. }, "keyup"), "" === i && x.find("." + r).remove(), void $())
  133. };
  134. f && k.on("keyup", j).on("blur", function (t) {
  135. var a = p[0].selectedIndex;
  136. e = k, d = i(p[0].options[a]).html(), setTimeout(function () {
  137. T(k.val(), function (e) {
  138. d || k.val("")
  139. }, "blur")
  140. }, 200)
  141. }), g.on("click", function () {
  142. var e = i(this),
  143. a = e.attr("lay-value"),
  144. n = p.attr("lay-filter");
  145. return !e.hasClass(c) && (e.hasClass("layui-select-tips") ? k.val("") : (k.val(e.text()), e.addClass(s)), e.siblings().removeClass(s), p.val(a).removeClass("layui-form-danger"), layui.event.call(this, l, "select(" + n + ")", {
  146. elem: p[0],
  147. value: a,
  148. othis: t
  149. }), w(!0), !1)
  150. }), t.find("dl>dt").on("click", function (e) {
  151. return !1
  152. }), i(document).off("click", v).on("click", v)
  153. }
  154. };
  155. f.each(function (e, l) {
  156. var r = i(this),
  157. o = r.next("." + a),
  158. u = this.disabled,
  159. d = l.value,
  160. v = l.options[0];
  161. try{
  162. f = i(l.options[l.selectedIndex]);
  163. }catch(err){
  164. }
  165. if ("string" == typeof r.attr("lay-ignore")) return r.show();
  166. var h = "string" == typeof r.attr("lay-search"),
  167. p = v ? v.value ? t : v.innerHTML || t : t,
  168. m = i(['<div class="' + (h ? "" : "layui-unselect ") + a, (u ? " layui-select-disabled" : "") + '">', '<div class="' + n + '">', '<input type="text" placeholder="' + p + '" ' + ('value="' + (d ? f.html() : "") + '"') + (h ? "" : " readonly") + ' class="layui-input' + (h ? "" : " layui-unselect") + (u ? " " + c : "") + '">', '<i class="layui-edge"></i></div>', '<dl class="layui-anim layui-anim-upbit' + (r.find("optgroup")[0] ? " layui-select-group" : "") + '">', function (e) {
  169. var i = [];
  170. return layui.each(e, function (e, a) {
  171. 0 !== e || a.value ? "optgroup" === a.tagName.toLowerCase() ? i.push("<dt>" + a.label + "</dt>") : i.push('<dd lay-value="' + a.value + '" class="' + (d === a.value ? s : "") + (a.disabled ? " " + c : "") + '">' + a.innerHTML + "</dd>") : i.push('<dd lay-value="" class="layui-select-tips">' + (a.innerHTML || t) + "</dd>")
  172. }), 0 === i.length && i.push('<dd lay-value="" class="' + c + '">没有选项</dd>'), i.join("")
  173. }(r.find("*")) + "</dl>", "</div>"].join(""));
  174. o[0] && o.remove(), r.after(m), y.call(this, m, u, h)
  175. })
  176. },
  177. checkbox: function () {
  178. var e = {
  179. checkbox: ["layui-form-checkbox", "layui-form-checked", "checkbox"],
  180. _switch: ["layui-form-switch", "layui-form-onswitch", "switch"]
  181. },
  182. t = u.find("input[type=checkbox]"),
  183. a = function (e, t) {
  184. var a = i(this);
  185. e.on("click", function () {
  186. var i = a.attr("lay-filter"),
  187. n = (a.attr("lay-text") || "").split("|");
  188. a[0].disabled || (a[0].checked ? (a[0].checked = !1, e.removeClass(t[1]).find("em").text(n[1])) : (a[0].checked = !0, e.addClass(t[1]).find("em").text(n[0])), layui.event.call(a[0], l, t[2] + "(" + i + ")", {
  189. elem: a[0],
  190. value: a[0].value,
  191. othis: e
  192. }))
  193. })
  194. };
  195. t.each(function (t, n) {
  196. var l = i(this),
  197. r = l.attr("lay-skin"),
  198. s = (l.attr("lay-text") || "").split("|"),
  199. o = this.disabled;
  200. "switch" === r && (r = "_" + r);
  201. var u = e[r] || e.checkbox;
  202. if ("string" == typeof l.attr("lay-ignore")) return l.show();
  203. var d = l.next("." + u[0]),
  204. f = i(['<div class="layui-unselect ' + u[0], n.checked ? " " + u[1] : "", o ? " layui-checkbox-disbaled " + c : "", '"', r ? ' lay-skin="' + r + '"' : "", ">", function () {
  205. var e = n.title.replace(/\s/g, ""),
  206. i = {
  207. checkbox: [e ? "<span>" + n.title + "</span>" : "", '<i class="layui-icon">&#xe605;</i>'].join(""),
  208. _switch: "<em>" + ((n.checked ? s[0] : s[1]) || "") + "</em><i></i>"
  209. };
  210. return i[r] || i.checkbox
  211. }(), "</div>"].join(""));
  212. d[0] && d.remove(), l.after(f), a.call(this, f, u)
  213. })
  214. },
  215. radio: function () {
  216. var e = "layui-form-radio",
  217. t = ["&#xe643;", "&#xe63f;"],
  218. a = u.find("input[type=radio]"),
  219. n = function (a) {
  220. var n = i(this),
  221. s = "layui-anim-scaleSpring";
  222. a.on("click", function () {
  223. var o = n[0].name,
  224. c = n.parents(r),
  225. u = n.attr("lay-filter"),
  226. d = c.find("input[name=" + o.replace(/(\.|#|\[|\])/g, "\\$1") + "]");
  227. n[0].disabled || (layui.each(d, function () {
  228. var a = i(this).next("." + e);
  229. this.checked = !1, a.removeClass(e + "ed"), a.find(".layui-icon").removeClass(s).html(t[1])
  230. }), n[0].checked = !0, a.addClass(e + "ed"), a.find(".layui-icon").addClass(s).html(t[0]), layui.event.call(n[0], l, "radio(" + u + ")", {
  231. elem: n[0],
  232. value: n[0].value,
  233. othis: a
  234. }))
  235. })
  236. };
  237. a.each(function (a, l) {
  238. var r = i(this),
  239. s = r.next("." + e),
  240. o = this.disabled;
  241. if ("string" == typeof r.attr("lay-ignore")) return r.show();
  242. s[0] && s.remove();
  243. var u = i(['<div class="layui-unselect ' + e, l.checked ? " " + e + "ed" : "", (o ? " layui-radio-disbaled " + c : "") + '">', '<i class="layui-anim layui-icon">' + t[l.checked ? 0 : 1] + "</i>", "<div>" + function () {
  244. var e = l.title || "";
  245. return "string" == typeof r.next().attr("lay-radio") && (e = r.next().html(), r.next().remove()), e
  246. }() + "</div>", "</div>"].join(""));
  247. r.after(u), n.call(this, u)
  248. })
  249. }
  250. };
  251. return e ? d[e] ? d[e]() : a.error("不支持的" + e + "表单渲染") : layui.each(d, function (e, i) {
  252. i()
  253. }), n
  254. };
  255. var d = function () {
  256. var e = i(this),
  257. a = f.config.verify,
  258. s = null,
  259. o = "layui-form-danger",
  260. c = {},
  261. u = e.parents(r),
  262. d = u.find("*[lay-verify]"),
  263. v = e.parents("form")[0],
  264. h = u.find("input,select,textarea"),
  265. y = e.attr("lay-filter");
  266. if (layui.each(d, function (e, l) {
  267. var r = i(this),
  268. c = r.attr("lay-verify").split("|"),
  269. u = r.attr("lay-verType"),
  270. d = r.val();
  271. if (r.removeClass(o), layui.each(c, function (e, i) {
  272. var c, f = "",
  273. v = "function" == typeof a[i];
  274. if (a[i]) {
  275. var c = v ? f = a[i](d, l) : !a[i][0].test(d);
  276. if (f = f || a[i][1], c) return "tips" === u ? t.tips(f, function () {
  277. return "string" == typeof r.attr("lay-ignore") || "select" !== l.tagName.toLowerCase() && !/^checkbox|radio$/.test(l.type) ? r : r.next()
  278. }(), {
  279. tips: 1
  280. }) : "alert" === u ? t.alert(f, {
  281. title: "提示",
  282. shadeClose: !0
  283. }) : t.msg(f, {
  284. icon: 5,
  285. shift: 6
  286. }), n.android || n.ios || l.focus(), r.addClass(o), s = !0
  287. }
  288. }), s) return s
  289. }), s) return !1;
  290. var p = {};
  291. return layui.each(h, function (e, i) {
  292. if (i.name = (i.name || "").replace(/^\s*|\s*&/, ""), i.name) {
  293. if (/^.*\[\]$/.test(i.name)) {
  294. var t = i.name.match(/^(.*)\[\]$/g)[0];
  295. p[t] = 0 | p[t], i.name = i.name.replace(/^(.*)\[\]$/, "$1[" + p[t]++ + "]")
  296. }
  297. /^checkbox|radio$/.test(i.type) && !i.checked || (c[i.name] = i.value)
  298. }
  299. }), layui.event.call(this, l, "submit(" + y + ")", {
  300. elem: this,
  301. form: v,
  302. field: c
  303. })
  304. },
  305. f = new u,
  306. v = i(document),
  307. h = i(window);
  308. f.render(), v.on("reset", r, function () {
  309. var e = i(this).attr("lay-filter");
  310. setTimeout(function () {
  311. f.render(null, e)
  312. }, 50)
  313. }), v.on("submit", r, d).on("click", "*[lay-submit]", d), e(l, f)
  314. });