form.js 12 KB

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