cascader.html 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  7. <title>级联选择器</title>
  8. <link rel="stylesheet" href="../../../assets/libs/layui/css/layui.css"/>
  9. <link rel="stylesheet" href="../../../assets/module/admin.css?v=315"/>
  10. <!--[if lt IE 9]>
  11. <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
  12. <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
  13. <![endif]-->
  14. <style>
  15. .layui-form-label {
  16. padding-left: 0;
  17. padding-right: 0;
  18. width: 110px;
  19. }
  20. .layui-form-item {
  21. margin-bottom: 30px;
  22. }
  23. </style>
  24. </head>
  25. <body>
  26. <!-- 正文开始 -->
  27. <div class="layui-fluid">
  28. <div class="layui-row layui-col-space15">
  29. <div class="layui-col-md4">
  30. <div class="layui-card">
  31. <div class="layui-card-header">基本用法</div>
  32. <div class="layui-card-body">
  33. <div class="layui-form model-form">
  34. <div class="layui-form-item">
  35. <label class="layui-form-label">基本用法:</label>
  36. <div class="layui-input-block">
  37. <input id="demoCascader1" placeholder="请选择" class="layui-hide"/>
  38. </div>
  39. </div>
  40. <div class="layui-form-item">
  41. <label class="layui-form-label">设置默认值:</label>
  42. <div class="layui-input-block">
  43. <input id="demoCascader2" value="jiangsu,suzhou,shizilin" placeholder="请选择"
  44. class="layui-hide"/>
  45. </div>
  46. </div>
  47. <div class="layui-form-item">
  48. <label class="layui-form-label">移入展开:</label>
  49. <div class="layui-input-block">
  50. <input id="demoCascader3" placeholder="请选择" class="layui-hide"/>
  51. </div>
  52. </div>
  53. </div>
  54. </div>
  55. </div>
  56. </div>
  57. <div class="layui-col-md4">
  58. <div class="layui-card">
  59. <div class="layui-card-header">进阶用法</div>
  60. <div class="layui-card-body">
  61. <div class="layui-form model-form">
  62. <div class="layui-form-item">
  63. <label class="layui-form-label">全部禁用:</label>
  64. <div class="layui-input-block">
  65. <input id="demoCascader4" placeholder="请选择" class="layui-hide"/>
  66. </div>
  67. </div>
  68. <div class="layui-form-item">
  69. <label class="layui-form-label">部分禁用:</label>
  70. <div class="layui-input-block">
  71. <input id="demoCascader5" placeholder="请选择" class="layui-hide"/>
  72. </div>
  73. </div>
  74. <div class="layui-form-item">
  75. <label class="layui-form-label">选择即改变:</label>
  76. <div class="layui-input-block">
  77. <input id="demoCascader6" placeholder="请选择" class="layui-hide"/>
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82. </div>
  83. </div>
  84. <div class="layui-col-md4">
  85. <div class="layui-card">
  86. <div class="layui-card-header">高级用法</div>
  87. <div class="layui-card-body">
  88. <div class="layui-form model-form">
  89. <div class="layui-form-item">
  90. <label class="layui-form-label">自定义项:</label>
  91. <div class="layui-input-block">
  92. <input id="demoCascader7" placeholder="请选择" class="layui-hide"/>
  93. </div>
  94. </div>
  95. <div class="layui-form-item">
  96. <label class="layui-form-label">动态加载:</label>
  97. <div class="layui-input-block">
  98. <input id="demoCascader8" placeholder="请选择" class="layui-hide"/>
  99. </div>
  100. </div>
  101. <div class="layui-form-item">
  102. <label class="layui-form-label">搜索功能:</label>
  103. <div class="layui-input-block">
  104. <input id="demoCascader9" placeholder="请选择" class="layui-hide"/>
  105. </div>
  106. </div>
  107. </div>
  108. </div>
  109. </div>
  110. </div>
  111. <div class="layui-col-md4">
  112. <div class="layui-card">
  113. <div class="layui-card-header">表单验证</div>
  114. <div class="layui-card-body">
  115. <form class="layui-form model-form">
  116. <div class="layui-form-item">
  117. <label class="layui-form-label">请选择:</label>
  118. <div class="layui-input-block">
  119. <input id="demoCascader10" placeholder="请选择" class="layui-hide"
  120. lay-verType="tips" lay-verify="required" required/>
  121. </div>
  122. </div>
  123. <div class="layui-form-item text-center">
  124. <button class="layui-btn layui-btn-primary icon-btn" type="reset">
  125. <i class="layui-icon">&#x1006;</i>重置
  126. </button>
  127. <button class="layui-btn icon-btn" lay-filter="demoCascaderformSub" lay-submit>
  128. <i class="layui-icon">&#xe605;</i>提交
  129. </button>
  130. </div>
  131. </form>
  132. </div>
  133. </div>
  134. </div>
  135. <div class="layui-col-md4">
  136. <div class="layui-card">
  137. <div class="layui-card-header">常用示例</div>
  138. <div class="layui-card-body">
  139. <div class="layui-form model-form">
  140. <div class="layui-form-item">
  141. <label class="layui-form-label">省市区选择:</label>
  142. <div class="layui-input-block">
  143. <input id="demoCascader11" placeholder="请选择" class="layui-hide"/>
  144. </div>
  145. </div>
  146. <div class="layui-form-item">
  147. <label class="layui-form-label">专业选择:</label>
  148. <div class="layui-input-block">
  149. <input id="demoCascader12" placeholder="请选择" class="layui-hide"/>
  150. </div>
  151. </div>
  152. </div>
  153. </div>
  154. </div>
  155. </div>
  156. <div class="layui-col-md4">
  157. <div class="layui-card">
  158. <div class="layui-card-header">更多配置</div>
  159. <div class="layui-card-body">
  160. <div class="layui-form model-form">
  161. <div class="layui-form-item">
  162. <label class="layui-form-label">不显示清除:</label>
  163. <div class="layui-input-block">
  164. <input id="demoCascader13" placeholder="请选择" class="layui-hide"/>
  165. </div>
  166. </div>
  167. <div class="layui-form-item">
  168. <label class="layui-form-label">清除时重置:</label>
  169. <div class="layui-input-block">
  170. <input id="demoCascader14" placeholder="请选择" class="layui-hide"/>
  171. </div>
  172. </div>
  173. </div>
  174. </div>
  175. </div>
  176. </div>
  177. </div>
  178. </div>
  179. <!-- 加载动画 -->
  180. <div class="page-loading">
  181. <div class="ball-loader">
  182. <span></span><span></span><span></span><span></span>
  183. </div>
  184. </div>
  185. <!-- js部分 -->
  186. <script type="text/javascript" src="../../../assets/libs/layui/layui.js"></script>
  187. <script type="text/javascript" src="../../../assets/js/common.js?v=315"></script>
  188. <script type="text/javascript" src="../../../assets/module/cascader/citys-data.js"></script>
  189. <script>
  190. layui.use(['layer', 'form', 'tableX', 'cascader'], function () {
  191. var $ = layui.jquery;
  192. var layer = layui.layer;
  193. var form = layui.form;
  194. var tableX = layui.tableX;
  195. var cascader = layui.cascader;
  196. var data = [{
  197. value: 'beijing',
  198. label: '北京',
  199. children: [
  200. {
  201. value: 'gugong',
  202. label: '故宫'
  203. },
  204. {
  205. value: 'tiantan',
  206. label: '天坛'
  207. },
  208. {
  209. value: 'wangfujing',
  210. label: '王府井'
  211. }
  212. ]
  213. }, {
  214. value: 'jiangsu',
  215. label: '江苏',
  216. children: [
  217. {
  218. value: 'nanjing',
  219. label: '南京',
  220. children: [
  221. {
  222. value: 'fuzimiao',
  223. label: '夫子庙',
  224. }
  225. ]
  226. },
  227. {
  228. value: 'suzhou',
  229. label: '苏州',
  230. children: [
  231. {
  232. value: 'zhuozhengyuan',
  233. label: '拙政园',
  234. },
  235. {
  236. value: 'shizilin',
  237. label: '狮子林',
  238. }
  239. ]
  240. }
  241. ],
  242. }];
  243. // 基础用法
  244. cascader.render({
  245. elem: '#demoCascader1',
  246. data: data
  247. });
  248. // 设置默认值
  249. cascader.render({
  250. elem: '#demoCascader2',
  251. data: data
  252. });
  253. // 移入展开
  254. cascader.render({
  255. elem: '#demoCascader3',
  256. data: data,
  257. trigger: 'hover'
  258. });
  259. // 禁用全部
  260. cascader.render({
  261. elem: '#demoCascader4',
  262. data: data,
  263. disabled: true
  264. });
  265. // 禁用部分
  266. var data1 = tableX.deepClone(data);
  267. data1[0].children[2].disabled = true;
  268. data1[1].children[0].disabled = true;
  269. data1[1].children[1].children[1].disabled = true;
  270. cascader.render({
  271. elem: '#demoCascader5',
  272. data: data1
  273. });
  274. // 选择即改变
  275. cascader.render({
  276. elem: '#demoCascader6',
  277. data: data,
  278. changeOnSelect: true
  279. });
  280. // 自定义项
  281. cascader.render({
  282. elem: '#demoCascader7',
  283. data: data,
  284. renderFormat: function (labels, values) {
  285. return labels.join(' || ');
  286. }
  287. });
  288. // 动态加载
  289. cascader.render({
  290. elem: '#demoCascader8',
  291. reqData: function (values, callback, data) {
  292. setTimeout(function () { // 模拟网络请求
  293. callback(getData(data ? data.value : undefined));
  294. }, 1500);
  295. }
  296. });
  297. // 模拟网络请求加载数据
  298. function getData(value) {
  299. var list = [];
  300. if (!value) {
  301. list = [
  302. {value: 'beijing', label: '北京', haveChildren: true},
  303. {value: 'jiangsu', label: '江苏', haveChildren: true}
  304. ];
  305. } else if (value == 'beijing') {
  306. list = [
  307. {value: 'gugong', label: '故宫'},
  308. {value: 'tiantan', label: '天坛'},
  309. {value: 'wangfujing', label: '王府井'}
  310. ];
  311. } else if (value == 'jiangsu') {
  312. list = [
  313. {value: 'nanjing', label: '南京', haveChildren: true},
  314. {value: 'suzhou', label: '苏州', haveChildren: true}
  315. ];
  316. } else if (value == 'nanjing') {
  317. list = [
  318. {value: 'fuzimiao', label: '夫子庙'}
  319. ];
  320. } else if (value == 'suzhou') {
  321. list = [
  322. {value: 'zhuozhengyuan', label: '拙政园'},
  323. {value: 'shizilin', label: '狮子林'}
  324. ];
  325. }
  326. return list;
  327. }
  328. // 搜索功能
  329. cascader.render({
  330. elem: '#demoCascader9',
  331. data: data,
  332. filterable: true
  333. });
  334. // 表单验证
  335. cascader.render({
  336. elem: '#demoCascader10',
  337. data: data
  338. });
  339. form.on('submit(demoCascaderformSub)', function (data) {
  340. layer.closeAll('tips');
  341. layer.msg('表单验证通过', {icon: 1});
  342. return false;
  343. });
  344. // 省市区选择
  345. cascader.render({
  346. elem: '#demoCascader11',
  347. data: citysData,
  348. itemHeight: '250px',
  349. filterable: true
  350. });
  351. // 专业选择
  352. cascader.render({
  353. elem: '#demoCascader12',
  354. itemHeight: '220px',
  355. data: [{
  356. label: '计算机学院',
  357. value: '1',
  358. children: [{
  359. label: '软件技术',
  360. value: '1-1'
  361. }, {
  362. label: '计算机网络技术',
  363. value: '1-2'
  364. }, {
  365. label: '计算机信息管理',
  366. value: '1-3'
  367. }, {
  368. label: '物联网应用技术',
  369. value: '1-4'
  370. }, {
  371. label: '数字媒体应用技术',
  372. value: '1-5'
  373. }, {
  374. label: '移动互联应用技术',
  375. value: '1-6'
  376. }]
  377. }, {
  378. label: '机械工程学院',
  379. value: '2',
  380. children: [{
  381. label: '模具设计与制造',
  382. value: '2-1'
  383. }, {
  384. label: '机械设计与制造',
  385. value: '2-2'
  386. }, {
  387. label: '数控技术',
  388. value: '2-3'
  389. }, {
  390. label: '机械制造与自动化',
  391. value: '2-4'
  392. }]
  393. }, {
  394. label: '商学院',
  395. value: '3',
  396. children: [{
  397. label: '电子商务',
  398. value: '3-1'
  399. }, {
  400. label: '物流管理',
  401. value: '3-2'
  402. }, {
  403. label: '报关与国际货运',
  404. value: '3-3'
  405. }, {
  406. label: '连锁经营管理',
  407. value: '3-4'
  408. }, {
  409. label: '旅游管理',
  410. value: '3-5'
  411. }, {
  412. label: '商务英语',
  413. value: '3-6'
  414. }, {
  415. label: '会计',
  416. value: '3-7'
  417. }, {
  418. label: '金融管理',
  419. value: '3-8'
  420. }, {
  421. label: '工商企业管理',
  422. value: '3-9'
  423. }]
  424. }]
  425. });
  426. // 关闭清除按钮
  427. cascader.render({
  428. elem: '#demoCascader13',
  429. data: data,
  430. clearable: false
  431. });
  432. // 清除时重置
  433. cascader.render({
  434. elem: '#demoCascader14',
  435. data: data,
  436. clearAllActive: true
  437. });
  438. });
  439. </script>
  440. </body>
  441. </html>