jquery.search.city.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  1. /* ============================================================
  2. * 地区无限
  3. * ============================================================ */
  4. !function($) {
  5. var backdropLayerTpl = '<div class="modal_backdrop fade"></div>';
  6. var htmlLayerTpl = ['<div class="modal qs-category-unlimited def">', '<div class="modal_dialog">', '<div class="modal_content pie_about">', '<div class="modal_header">', '<span class="title J_modal_title"></span>', '<span class="max_remind J_modal_max"></span>', '<a href="javascript:;" class="close J_dismiss_modal"></a>', '</div>', '<div class="modal_body pd0">', '<div class="listed_group" id="J_listed_group">', '<div class="left_text">已选择:</div>', '<div class="center_text" id="J_listed_content"></div>', '<a href="javascript:;" class="right_text" id="J_listed_clear">清空</a>', '<div class="clear"></div>', '</div>', '<div class="J_modal_content"></div>', '</div>', '</div>', '</div>'].join('');
  7. // 点击
  8. $('[data-toggle="funCityModal"]').on('click', function() {
  9. var that = $(this);
  10. if (QS_city_parent.length <= 0) {
  11. console.log('地区分类出错!!!');
  12. return false;
  13. }
  14. var titleValue = $(this).data('title');
  15. var multipleValue = eval($(this).data('multiple'));
  16. var maximumValue = eval($(this).data('maximum'));
  17. var widthValue = eval($(this).data('width'));
  18. var defaultCity = qscms.default_district;
  19. var defaultCitySpell = qscms.default_district_spell;
  20. var htmlCategory = '';
  21. var isSpell = app_spell;
  22. var cateLevel = qscms.subsite_level;
  23. var checkedPool = new Array();
  24. var defaultKeyArr = '';
  25. var recoverVal = $('#recoverSearchCityModalCode').val();
  26. var recoverVal3 = $('#recoverSearchCityModalCode3').val();
  27. var ids = '';
  28. htmlCategory += '<div class="selected-group J_selected_group"><div class="selected-box"><div class="s-l-txt">已选择:</div><div class="p-cate J_cate_box"></div><div class="btn-some" id="J_clear_all"><a href="javascript:;">清空</a></div></div></div>';
  29. htmlCategory += '<div class="category-select"><div class="cs-left"><span>选择地区</span></div><div class="cs-right" id="selectCategoryBox">';
  30. htmlCategory += '<div class="clear"></div></div><div class="clear"></div></div>';
  31. htmlCategory += '<div class="cate-type" id="checkboxCategoryBox">';
  32. htmlCategory += '<div class="clear"></div></div>';
  33. htmlCategory += '</div>';
  34. // 初始化
  35. prepareModal(titleValue, multipleValue, maximumValue);
  36. // 模板写入
  37. $('.J_modal_content').html(htmlCategory);
  38. $('.J_btn_yes').attr('id', 'J_btn_yes_city');
  39. // 显示并调整位置
  40. $('.modal_dialog').css({
  41. width: widthValue + 'px',
  42. left: ($(window).width() - widthValue) / 2,
  43. top: ($(window).height() - $('.modal_dialog').outerHeight()) / 2 + $(document).scrollTop()
  44. })
  45. $('.modal_backdrop').addClass('in');
  46. if (isSpell) {
  47. var cateParentHtml = '<select class="categorySelect">';
  48. for (var i = 0; i < QS_city_spell_parent.length; i++) {
  49. cateParentHtml += '<option value="' + QS_city_spell_parent[i].split(',')[0] + '">' + QS_city_spell_parent[i].split(',')[1] + '</option>';
  50. }
  51. cateParentHtml += '</select>';
  52. $('#selectCategoryBox').html(cateParentHtml);
  53. function getParentId(id) {
  54. $.each(QS_city_spell_parent, function (index, val) {
  55. var parentValArr = val.split(',');
  56. if (QS_city_spell[parentValArr[0]]) {
  57. var subArr = QS_city_spell[parentValArr[0]].split('`');
  58. getPid(id, subArr, parentValArr[0]);
  59. }
  60. })
  61. return ids;
  62. }
  63. function getPid(id, subArr, parentVal) {
  64. for (var j = 0; j < subArr.length; j++) {
  65. if (id == subArr[j].split(',')[0]) {
  66. if (ids) {
  67. ids = parentVal + '.' + ids;
  68. } else {
  69. ids = parentVal;
  70. }
  71. } else {
  72. if (QS_city_spell[subArr[j].split(',')[0]]) {
  73. var ssubArr = QS_city_spell[subArr[j].split(',')[0]].split('`');
  74. getPid(id, ssubArr, parentVal + '.' + subArr[j].split(',')[0]);
  75. }
  76. }
  77. }
  78. }
  79. // 默认值和需要恢复的处理
  80. if (recoverVal.length) {
  81. ids = '';
  82. var firstKeepHtml = getParentId(recoverVal);
  83. if (firstKeepHtml) {
  84. var firstHtml = firstKeepHtml + '.' + recoverVal;
  85. var firstKeepArr = firstHtml.toString().split('.');
  86. getSubCateHtml(firstKeepArr[0],firstKeepArr);
  87. for (var i = 0; i < $('.categorySelect').length; i++) {
  88. for (var j = 0; j < firstKeepArr.length; j++) {
  89. $('.categorySelect').eq(i).find('option').each(function(index, el) {
  90. if ($(this).val() == firstKeepArr[j]) {
  91. $(this).prop('selected', !0);
  92. }
  93. })
  94. }
  95. recoverCheckbox()
  96. }
  97. } else {
  98. $('.categorySelect').eq(0).find('option').each(function(index, el) {
  99. if ($(this).val() == recoverVal) {
  100. $(this).prop('selected', !0);
  101. }
  102. })
  103. if (getSubCateLevel(recoverVal,'')) {
  104. getSubCateHtml(recoverVal,'');
  105. }
  106. }
  107. } else {
  108. if (defaultCitySpell) {
  109. var firstKeepArr = defaultCitySpell.split('.');
  110. getSubCateHtml(firstKeepArr[0], '');
  111. for (var i = 0; i < $('.categorySelect').length; i++) {
  112. for (var j = 0; j < firstKeepArr.length; j++) {
  113. $('.categorySelect').eq(i).find('option').each(function(index, el) {
  114. if ($(this).val() == firstKeepArr[j]) {
  115. $(this).prop('selected', !0);
  116. }
  117. })
  118. }
  119. }
  120. } else {
  121. getSubCateHtml($('.categorySelect').eq(0).find('option:selected').val(),'');
  122. $('.categorySelect').eq(0).find('option').each(function(index, el) {
  123. if ($(this).val() == recoverVal) {
  124. $(this).prop('selected', !0);
  125. }
  126. })
  127. }
  128. }
  129. // 复原checkbox选中
  130. function recoverCheckbox() {
  131. $('.checkOption').each(function(index, el) {
  132. if ($(this).val() ==$("#recoverSearchCityModalCode3").val()){
  133. $(this).closest('label').addClass('selected');
  134. $(this).prop('checked', !0);
  135. }
  136. })
  137. }
  138. // 父级选择
  139. $(document).off('change','.categorySelect').on('change','.categorySelect', function() {
  140. if (!($(this).find('option:selected').hasClass('nolimit'))) {
  141. var currentVal = $(this).val();
  142. var currentText = $(this).find('option:selected').text();
  143. $(this).nextAll().remove();
  144. $('#checkboxCategoryBox').empty();
  145. getSubCateHtml(currentVal, '');
  146. }
  147. })
  148. // 生成列表
  149. function getSubCateHtml(currendId, dataArr) {
  150. var subCateLevelArr = new Array();
  151. if (dataArr.length) {
  152. subCateLevelArr = dataArr;
  153. } else {
  154. subCateLevelArr = getSubCateLevel(currendId,'').split('.');
  155. }
  156. var cateSubHtml = '';
  157. for(i = 0;i < subCateLevelArr.length-1; i++) {
  158. cateSubHtml += '<select class="categorySelect">';
  159. // cateSubHtml += '<option class="nolimit" value="'+subCateLevelArr[i]+'" title="'+getNameNew(subCateLevelArr[i])+'">不限</option>';
  160. var citySubArr = QS_city_spell[subCateLevelArr[i]].split('`');
  161. for(j = 0;j < citySubArr.length; j++){
  162. cateSubHtml += '<option value="'+citySubArr[j].split(',')[0]+'">'+citySubArr[j].split(',')[1]+'</option>';
  163. }
  164. cateSubHtml += '</select>';
  165. }
  166. $('#selectCategoryBox').append(cateSubHtml);
  167. var cateChekcId = subCateLevelArr[subCateLevelArr.length-1];
  168. var checkName = $('.categorySelect').eq($('.categorySelect').length-1).find('option:selected').text();
  169. if (getSubCateLevel(currendId,'')) {
  170. // $('#checkboxCategoryBox').html(checkboxFactory(cateChekcId, getNameNew(cateChekcId)));
  171. $('#checkboxCategoryBox').html(checkboxFactory(cateChekcId, checkName));
  172. } else {
  173. $('#checkboxCategoryBox').html(checkboxFactory(currendId, getNameNew(currendId)));
  174. }
  175. }
  176. // 生成checkbox
  177. function checkboxFactory(id, title) {
  178. var checkboxHtml = '<div class="dl">';
  179. checkboxHtml += '<div class="dt"><span>' + title + '</span></div>';
  180. checkboxHtml += '<div class="dd"><ul>';
  181. if ( QS_city_spell[id]) {
  182. var checkArr = QS_city_spell[id].split('`');
  183. for (var i = 0; i < checkArr.length; i++) {
  184. var arrP = checkArr[i].split(',');
  185. checkboxHtml += '<li><div class="one-select"><label><input class="check-box checkOption" type="checkbox" value="' + arrP[0] + '" data-text="' + arrP[1] + '">' + arrP[1] + '</label></div></li>';
  186. }
  187. } else {
  188. id = $('.categorySelect').eq($('.categorySelect').length-1).find('option:selected').val();
  189. checkboxHtml += '<li><div class="one-select"><label><input class="check-box checkOption noLimit" type="checkbox" value="' + id + '" data-text="' + title + '">不限</label></div></li>';
  190. }
  191. checkboxHtml += '</ul></div>';
  192. checkboxHtml += '<div class="clear"></div></div>';
  193. return checkboxHtml;
  194. }
  195. // 获得级数
  196. function getSubCateLevel(id, arr) {
  197. if (QS_city_spell[id]) {
  198. var levelIdArr = QS_city_spell[id].split('`');
  199. if (arr.length) {
  200. arr = arr + '.' + id;
  201. } else {
  202. arr = id;
  203. }
  204. return getSubCateLevel(levelIdArr[0].split(',')[0],arr);
  205. } else {
  206. return arr;
  207. }
  208. }
  209. // 根据id获取对应文字
  210. function getNameNew(id) {
  211. var name = '';
  212. $.each(QS_city_spell_parent, function (index, val) {
  213. var parentValArr = val.split(',');
  214. if (QS_city_spell[parentValArr[0]]) {
  215. var subArr = QS_city_spell[parentValArr[0]].split('`');
  216. for (var j = 0; j < subArr.length; j++) {
  217. if (id == subArr[j].split(',')[0]) {
  218. name = subArr[j].split(',')[1];
  219. }
  220. }
  221. }
  222. })
  223. if (!name) {
  224. $.each(QS_city_spell_parent, function (index, val) {
  225. var parentValArr = val.split(',');
  226. if (id == parentValArr[0]) {
  227. name = parentValArr[1];
  228. }
  229. })
  230. }
  231. return name;
  232. }
  233. } else {
  234. // id
  235. var cateParentHtml = '<select class="categorySelect">';
  236. for (var i = 0; i < QS_city_parent.length; i++) {
  237. cateParentHtml += '<option value="' + QS_city_parent[i].split(',')[0] + '">' + QS_city_parent[i].split(',')[1] + '</option>';
  238. }
  239. cateParentHtml += '</select>';
  240. $('#selectCategoryBox').html(cateParentHtml);
  241. function getParentId2(id) {
  242. for (var i = 0; i < QS_city.length; i++) {
  243. if (QS_city[i]) {
  244. var subArr = QS_city[i].split('`');
  245. for (var j = 0; j < subArr.length; j++) {
  246. if (id == subArr[j].split(',')[0]) {
  247. if (ids) {
  248. ids = i + '.' + ids;
  249. } else {
  250. ids = i;
  251. }
  252. getParentId2(i);
  253. }
  254. }
  255. }
  256. }
  257. return ids;
  258. }
  259. // 默认值和需要恢复的处理
  260. if (recoverVal.length) {
  261. ids = '';
  262. var firstKeepHtml = getParentId2(recoverVal);
  263. if (firstKeepHtml) {
  264. var firstHtml = firstKeepHtml + '.' + recoverVal;
  265. var firstKeepArr = firstHtml.toString().split('.');
  266. getSubCateHtml2(firstKeepArr[0],firstKeepArr);
  267. for (var i = 0; i < $('.categorySelect').length; i++) {
  268. for (var j = 0; j < firstKeepArr.length; j++) {
  269. $('.categorySelect').eq(i).find('option').each(function(index, el) {
  270. if ($(this).val() == firstKeepArr[j]) {
  271. $(this).prop('selected', !0);
  272. }
  273. })
  274. }
  275. }
  276. } else {
  277. $('.categorySelect').eq(0).find('option').each(function(index, el) {
  278. if ($(this).val() == recoverVal) {
  279. $(this).prop('selected', !0);
  280. }
  281. })
  282. if (getSubCateLevel2(recoverVal,'')) {
  283. getSubCateHtml2(recoverVal,'');
  284. }
  285. }
  286. } else {
  287. if (defaultCity) {
  288. var firstKeepArr = defaultCity.split('.');
  289. getSubCateHtml2(firstKeepArr[0], '');
  290. for (var i = 0; i < $('.categorySelect').length; i++) {
  291. for (var j = 0; j < firstKeepArr.length; j++) {
  292. $('.categorySelect').eq(i).find('option').each(function(index, el) {
  293. if ($(this).val() == firstKeepArr[j]) {
  294. $(this).prop('selected', !0);
  295. }
  296. })
  297. }
  298. }
  299. } else {
  300. getSubCateHtml2($('.categorySelect').eq(0).find('option:selected').val(),'');
  301. $('.categorySelect').eq(0).find('option').each(function(index, el) {
  302. if ($(this).val() == recoverVal) {
  303. $(this).prop('selected', !0);
  304. }
  305. })
  306. }
  307. }
  308. // 父级选择
  309. $(document).off('change','.categorySelect').on('change','.categorySelect', function() {
  310. /*if ($.browser.msie) {
  311. }*/
  312. if (!($(this).find('option:selected').hasClass('nolimit'))) {
  313. var currentVal = $(this).val();
  314. var currentText = $(this).find('option:selected').text();
  315. $(this).nextAll().remove();
  316. $('#checkboxCategoryBox').empty();
  317. getSubCateHtml2(currentVal, '');
  318. }
  319. })
  320. // 生成列表
  321. function getSubCateHtml2(currendId, dataArr) {
  322. var subCateLevelArr = new Array();
  323. if (dataArr.length) {
  324. subCateLevelArr = dataArr;
  325. } else {
  326. subCateLevelArr = getSubCateLevel2(currendId,'').split('.');
  327. }
  328. var cateSubHtml = '';
  329. for(i = 0;i < subCateLevelArr.length-1; i++) {
  330. cateSubHtml += '<select class="categorySelect">';
  331. var citySubArr = QS_city[subCateLevelArr[i]].split('`');
  332. // cateSubHtml += '<option class="nolimit" value="'+subCateLevelArr[i]+'" title="'+getNameNew(subCateLevelArr[i])+'">不限</option>';
  333. for(j = 0;j < citySubArr.length; j++){
  334. cateSubHtml += '<option value="'+citySubArr[j].split(',')[0]+'">'+citySubArr[j].split(',')[1]+'</option>';
  335. }
  336. cateSubHtml += '</select>';
  337. }
  338. $('#selectCategoryBox').append(cateSubHtml);
  339. var cateChekcId = subCateLevelArr[subCateLevelArr.length-1];
  340. var checkName = $('.categorySelect').eq($('.categorySelect').length-1).find('option:selected').text();
  341. if (getSubCateLevel2(currendId,'')) {
  342. // $('#checkboxCategoryBox').html(checkboxFactory2(cateChekcId, getNameNew(cateChekcId)));
  343. $('#checkboxCategoryBox').html(checkboxFactory2(cateChekcId, checkName));
  344. } else {
  345. $('#checkboxCategoryBox').html(checkboxFactory2(currendId, getNameNew(currendId)));
  346. }
  347. }
  348. // 生成checkbox
  349. function checkboxFactory2(id, title) {
  350. var checkboxHtml = '<div class="dl">';
  351. checkboxHtml += '<div class="dt"><span>' + title + '</span></div>';
  352. checkboxHtml += '<div class="dd"><ul>';
  353. if (QS_city[id]) {
  354. var checkArr = QS_city[id].split('`');
  355. for (var i = 0; i < checkArr.length; i++) {
  356. var arrP = checkArr[i].split(',');
  357. checkboxHtml += '<li><div class="one-select"><label><input class="check-box checkOption" type="checkbox" data-code="' + arrP[0] + '" data-text="' + arrP[1] + '">' + arrP[1] + '</label></div></li>';
  358. }
  359. } else {
  360. id = $('.categorySelect').eq($('.categorySelect').length-1).find('option:selected').val();
  361. checkboxHtml += '<li><div class="one-select"><label><input class="check-box checkOption noLimit" type="checkbox" data-code="' + id + '" data-text="' + title + '">不限</label></div></li>';
  362. }
  363. checkboxHtml += '</ul></div>';
  364. checkboxHtml += '<div class="clear"></div></div>';
  365. return checkboxHtml;
  366. }
  367. // 根据id获取对应文字
  368. function getNameNew(id) {
  369. var name = '';
  370. for (var i = 0; i < QS_city.length; i++) {
  371. if (QS_city[i]) {
  372. var iArr = QS_city[i].split('`');
  373. for (var j = 0; j < iArr.length; j++) {
  374. if (id == iArr[j].split(',')[0]) {
  375. name = iArr[j].split(',')[1];
  376. }
  377. }
  378. }
  379. }
  380. if (!name) {
  381. // 只有一级
  382. for (var i = 0; i < QS_city_parent.length; i++) {
  383. if (id == QS_city_parent[i].split(',')[0]) {
  384. name = QS_city_parent[i].split(',')[1];
  385. }
  386. }
  387. }
  388. return name;
  389. }
  390. // 获得级数
  391. function getSubCateLevel2(id, arr) {
  392. if (QS_city[id]) {
  393. var levelIdArr = QS_city[id].split('`');
  394. if (arr.length) {
  395. arr = arr + '.' + id;
  396. } else {
  397. arr = id;
  398. }
  399. return getSubCateLevel2(levelIdArr[0].split(',')[0],arr);
  400. } else {
  401. return arr;
  402. }
  403. }
  404. }
  405. })
  406. //最后一级点击
  407. $(document).off("click",'.checkOption').on('click','.checkOption', function() {
  408. var currentVal3 = $(this).val();
  409. var currentText = $(this).data("text");
  410. var currentVal = $('.categorySelect').eq($('.categorySelect').length-1).val();
  411. $('#searchCityModalCode').val(currentVal3);
  412. $('#recoverSearchCityModalCode').val(currentVal);
  413. $('#recoverSearchCityModalCode3').val(currentVal3);
  414. $('[data-toggle="funCityModal"]').text(currentText);
  415. $('[data-toggle="funCityModal"]').attr('title', currentText);
  416. removeModal();
  417. })
  418. // 确定
  419. $(document).off('click','#J_btn_yes_city').on('click','#J_btn_yes_city', function() {
  420. var currentVal = $('.categorySelect:last').find('option:selected').val();
  421. var currentText = $('.categorySelect:last').find('option:selected').text();
  422. if ($('.categorySelect:last').find('option:selected').hasClass('nolimit')) {
  423. currentText = $('.categorySelect:last').find('option:selected').attr('title');
  424. }
  425. $('#searchCityModalCode').val(currentVal);
  426. $('#recoverSearchCityModalCode').val(currentVal);
  427. $('[data-toggle="funCityModal"]').text(currentText);
  428. $('[data-toggle="funCityModal"]').attr('title', currentText);
  429. removeModal();
  430. })
  431. // 初始化程序
  432. function prepareModal(titleValue, multipleValue, maximumValue) {
  433. var ie = !-[1, ];
  434. var ie6 = !-[1, ] && !window.XMLHttpRequest;
  435. $(backdropLayerTpl).appendTo($(document.body));
  436. if (ie6) {
  437. $('.modal_backdrop').css("height", $(document).height());
  438. }
  439. $(htmlLayerTpl).appendTo($(document.body));
  440. $('.J_modal_title').text(titleValue);
  441. multipleValue = true;
  442. if (multipleValue) {
  443. //$('.J_modal_max').text('(最多选择' + maximumValue + '个)');
  444. }
  445. if (!multipleValue) {
  446. $('.modal_footer').hide();
  447. }
  448. $(".J_hoverbut").hover(function() {
  449. $(this).addClass("hover");
  450. }, function() {
  451. $(this).removeClass("hover");
  452. })
  453. // 可拖动
  454. var newObj = $('.modal_dialog');
  455. var newTit = newObj.find(".modal_header");
  456. newTit.mousedown(function(e) {
  457. var offset = newObj.offset();
  458. var x = e.pageX - offset.left;
  459. var y = e.pageY - offset.top;
  460. $(document).bind('mousemove', function(ev) {
  461. newObj.bind('selectstart', function() {
  462. return false;
  463. })
  464. var newx = ev.pageX - x;
  465. var newy = ev.pageY - y;
  466. newObj.css({
  467. 'left': newx + "px",
  468. 'top': newy + "px"
  469. })
  470. })
  471. })
  472. $(document).mouseup(function() {
  473. $(this).unbind("mousemove");
  474. })
  475. if (ie) {
  476. if (window.PIE) {
  477. $('.pie_about').each(function() {
  478. PIE.attach(this);
  479. })
  480. }
  481. }
  482. }
  483. // 关闭
  484. $(document).on('click','.J_dismiss_modal', function() {
  485. removeModal();
  486. })
  487. // esc关闭
  488. $(document).on('keydown', function(event) {
  489. if (event.keyCode == 27) {
  490. removeModal();
  491. }
  492. })
  493. //关闭弹窗的公共方法
  494. function removeModal() {
  495. setTimeout(function() {
  496. $('.modal_backdrop').remove();
  497. $('.modal').remove();
  498. }, 50)
  499. }
  500. }(window.jQuery);