/* ============================================================ * 地区选择 * ============================================================ */ !function($) { var backdropLayerTpl = ''; var htmlLayerTpl = [''].join(''); // 处理需要复原的数据 $('.J_resultcode_city').each(function(){ if ($(this).val().length) { var codeArr = $(this).val().split(','); // var ciSub = subsite_level-1; var newCodeArr = new Array(); for (var i = 0; i < codeArr.length; i++) { var sArr = codeArr[i].split('.'); if (eval(sArr[sArr.length-1])) { newCodeArr.push(sArr[sArr.length-1]); } else { if (eval(sArr[sArr.length-2])) { newCodeArr.push(sArr[sArr.length-2]); } else { newCodeArr.push(sArr[sArr.length-3]); } } } $(this).val(newCodeArr); } }) /*if ($('.J_resultcode_city').val().length) { var codeArr = $('.J_resultcode_city').val().split(','); // var ciSub = subsite_level-1; var newCodeArr = new Array(); for (var i = 0; i < codeArr.length; i++) { var sArr = codeArr[i].split('.'); if (eval(sArr[sArr.length-1])) { newCodeArr.push(sArr[sArr.length-1]); } else { if (eval(sArr[sArr.length-2])) { newCodeArr.push(sArr[sArr.length-2]); } else { newCodeArr.push(sArr[sArr.length-3]); } } } $('.J_resultcode_city').val(newCodeArr); }*/ // 点击 $('[data-toggle="funCityModal"]').on('click', function() { var that = $(this); if (QS_city_parent.length <= 0) { //console.log('地区分类出错!!!'); return false; } var titleValue = $(this).data('title'); var multipleValue = eval($(this).data('multiple')); var maximumValue = eval($(this).data('maximum')); var widthValue = eval($(this).data('width')); var getPoint = eval($(this).data('getpoint')); var defaultCity = default_district; // var defaultCity = "9.107"; var htmlCategory = ''; //var cateLevel = default_level; var cateLevel = 2; var checkedPool = new Array(); var defaultKeyArr = ''; var recoverVal = $(this).find('.J_resultcode_city').val(); var recoverKeepVal = that.find('.J_resultcode_city').attr('keep'); htmlCategory += '
已选择:
'; htmlCategory += '
选择地区
'; htmlCategory += '
'; htmlCategory += '
'; htmlCategory += '
'; htmlCategory += ''; // 初始化 prepareModal(titleValue, multipleValue, maximumValue); // 模板写入 $('.J_modal_content').html(htmlCategory); $('.J_btn_yes').attr('id', 'J_btn_yes_city'); // 显示并调整位置 $('.modal_dialog').css({ width: widthValue + 'px', left: ($(window).width() - widthValue) / 2, top: ($(window).height() - $('.modal_dialog').outerHeight()) / 2 + $(document).scrollTop() }) $('.modal_backdrop').addClass('in'); if (cateLevel > 1) { // 地区级数大于一级 var cateParentHtml = ''; $('#selectCategoryBox').html(cateParentHtml); // 默认值和需要恢复的处理 if (recoverVal.length) { var recoverKeepArr = recoverKeepVal.split(','); var firstKeppArr = recoverKeepArr[0].split('.'); var subCateLevelArr = new Array(); if (firstKeppArr.length > 1) { subCateLevelArr = firstKeppArr.slice(0, firstKeppArr.length-1); getSubCateHtml(firstKeppArr[0],subCateLevelArr); for (var i = 0; i < $('.categorySelect').length; i++) { for (var j = 0; j < subCateLevelArr.length; j++) { $('.categorySelect').eq(i).find('option').each(function(index, el) { if ($(this).val() == subCateLevelArr[j]) { $(this).prop('selected', !0); } }) } } setCheckCode(); setPool(recoverKeepVal.split(','), 0); } else { $('.categorySelect').eq(0).find('option').each(function(index, el) { if ($(this).val() == firstKeppArr) { $(this).prop('selected', !0); } }) getSubCateHtml(firstKeppArr[0],firstKeppArr); setCheckCode(); setPool(recoverKeepVal.split(','), 1); } } else { if (defaultCity) { // 默认地区 var firstKeppArr = defaultCity.toString().split('.'); if (firstKeppArr.length > 1) { getSubCateHtml(firstKeppArr[0],''); for (var i = 0; i < $('.categorySelect').length; i++) { for (var j = 0; j < firstKeppArr.length; j++) { $('.categorySelect').eq(i).find('option').each(function(index, el) { if ($(this).val() == firstKeppArr[j]) { $(this).prop('selected', !0); } }) } } setCheckCode(); } else { $('.categorySelect').eq(0).find('option').each(function(index, el) { if ($(this).val() == firstKeppArr) { $(this).prop('selected', !0); } }) getSubCateHtml(firstKeppArr[0],''); setCheckCode(); } } else { getSubCateHtml($('.categorySelect').eq(0).find('option:selected').val(),''); setCheckCode(); } } } else { // 只有一级 $('.category-select').remove(); var checkboxHtml = '
'; checkboxHtml += '
选择地区
'; checkboxHtml += '
'; checkboxHtml += '
'; $('#checkboxCategoryBox').html(checkboxHtml); if (recoverVal.length) { setPool(recoverVal.split(','), 1); } } // 复原选中和同步 recoverCheckbox(); if (multipleValue) { syncOptionSelected(); } // 父级选择 // $('.categorySelect').off().on('change', function() { $(document).off('change','.categorySelect').on('change','.categorySelect' ,function() { // if ($.browser.msie) { // // } var currentVal = $(this).val(); $(this).nextAll().remove(); $('#checkboxCategoryBox').empty(); getSubCateHtml(currentVal, ''); setCheckCode(); recoverCheckbox(); }) // 动态替换code function setCheckCode() { var checkId = ''; $('.categorySelect').each(function(index, el) { checkId += $('.categorySelect').eq(index).find('option:selected').val() + '.'; }) $('.checkOption').each(function(index, el) { if (!$(this).hasClass('noLimit')) { $(this).data('code', checkId + $(this).data('code')); } else { if ($('.categorySelect').length > 1) { $(this).data('code', checkId + $(this).data('code')); } } }) } // 设置还原数据 function setPool(poolArr, cateType) { for (var i = 0; i < poolArr.length; i++) { var itemName = ''; if (cateType) { itemName = getName(poolArr[i].split('.')[poolArr[i].split('.').length-2],poolArr[i].split('.')[poolArr[i].split('.').length-1], 1); } else { itemName = getName(poolArr[i].split('.')[poolArr[i].split('.').length-2],poolArr[i].split('.')[poolArr[i].split('.').length-1], 0); } checkedPool.push(poolArr[i] + '`' + itemName); } } // 设置第一级的选中状态 function setSelected(comparId) { $('.categorySelect').eq(0).find('option').each(function(index, el) { if ($(this).val() == comparId) { $(this).prop('selected', !0); } }) } // 生成列表 function getSubCateHtml(currendId, dataArr) { var subCateLevelArr = new Array(); if (dataArr.length) { subCateLevelArr = dataArr; } else { subCateLevelArr = getSubCateLevel(currendId,'').split('.'); } var cateSubHtml = ''; for(i = 0;i < subCateLevelArr.length-1; i++) { cateSubHtml += ''; } $('#selectCategoryBox').append(cateSubHtml); var cateChekcId = subCateLevelArr[subCateLevelArr.length-1]; var checkName = $('.categorySelect').eq($('.categorySelect').length-1).find('option:selected').text(); if (getSubCateLevel(currendId,'')) { $('#checkboxCategoryBox').html(checkboxFactory(cateChekcId, getNameNew(cateChekcId))); } else { $('#checkboxCategoryBox').html(checkboxFactory(currendId, getNameNew(currendId))); } } // 获得级数 function getSubCateLevel(id, arr) { if (QS_city[id]) { var levelIdArr = QS_city[id].split('`'); if (arr.length) { arr = arr + '.' + id; } else { arr = id; } return getSubCateLevel(levelIdArr[0].split(',')[0],arr); } else { return arr; } } // 最后一级点击 // $('.checkOption').off().on('click', function() { $(document).off("click",'.checkOption').on('click','.checkOption', function() { // 多选单选 if (multipleValue) { var secCity =$(".categorySelect").eq(1).find("option:selected").text(); var poolSub = $(this).data('code') + '`' +secCity+ $(this).data('text'); // 是否选中 if ($(this).is(':checked')) { //是否不限 var isLimit = $(this).data('code').split('.')[$(this).data('code').split('.').length-1]; if(isLimit!=="0"){ //去除不限 var currLimitarr = $(this).data('code').split('.') var arr = currLimitarr.pop(); var currLimitstring = currLimitarr.join('.')+".0`"; if(checkedPool.indexOf(currLimitstring+secCity+"不限")!==-1){ checkedPool.splice($.inArray(currLimitstring+secCity+"不限", checkedPool), 1); } if ((checkedPool.length + 1) > maximumValue) { $(this).prop('checked', 0); disapperTooltip('remind', '最多选择' + maximumValue + '个'); return false; } else { $('.checkOption:first').prop('checked', 0); $('.checkOption:first').closest('label').removeClass('selected'); checkedPool.push(poolSub); $(this).closest('label').addClass('selected'); } }else{ //去除不限同级城市 $('.checkOption').prop('checked', 0); $('.checkOption').closest('label').removeClass('selected'); $(this).prop('checked', true); $(this).closest('label').addClass('selected'); var currLimitarr1 = $(this).data('code'); var currLimitstring1 = currLimitarr1.substring(0,currLimitarr1.length-2); var newcheckedPool= new Array(); for(var j = 0;j maximumValue) { $(this).prop('checked', 0); disapperTooltip('remind', '最多选择' + maximumValue + '个'); return false; } } } else { checkedPool.splice($.inArray(poolSub, checkedPool), 1); $(this).closest('label').removeClass('selected'); } syncOptionSelected(); } else { var thisCode = $(this).data('code'); var thisText = $(this).data('text'); if (!$(this).hasClass('noLimit')) { if ($('.categorySelect').length > 1) { thisText = $(".categorySelect").eq($('.categorySelect').length-1).find("option:selected").text()+"/"+thisText; if(getPoint){ searchByStationName(thisText); } that.find('.J_resultcode_city').val(thisCode.split('.')[thisCode.split('.').length-1]); } else { if($('.categorySelect').length == 1){ if(getPoint){ searchByStationName(thisText); } that.find('.J_resultcode_city').val(thisCode.split('.')[thisCode.split('.').length-1]); }else{ that.find('.J_resultcode_city').val(thisCode); } } } else { if ($('.categorySelect').length > 1) { that.find('.J_resultcode_city').val(thisCode.split('.')[thisCode.split('.').length-1]); } else { if($('.categorySelect').length == 1){ if(getPoint){ searchByStationName(thisText); } that.find('.J_resultcode_city').val(thisCode.split('.')[thisCode.split('.').length-1]); }else{ that.find('.J_resultcode_city').val(thisCode); } } } that.find('.J_resultcode_city').attr('keep', thisCode); that.find('.J_resuletitle_city').text(thisText); that.find('.J_resuletitle_city').attr('title', thisText); removeModal(); } }) // 根据id获取对应文字 function getNameNew(id) { var name = ''; for (var i in QS_city) { if (QS_city[i]) { var iArr = QS_city[i].split('`'); for (var j = 0; j < iArr.length; j++) { if (id == iArr[j].split(',')[0]) { name = iArr[j].split(',')[1]; } } } } if (!name) { // 只有一级 for (var i in QS_city_parent) { if (id == QS_city_parent[i].split(',')[0]) { name = QS_city_parent[i].split(',')[1]; } } } return name; } // 根据id获取对应文字 function getName(fid,id, pid) { var name = ''; var cityname =''; if (pid) { // 只有一级 for (var i in QS_city_parent) { if (id == QS_city_parent[i].split(',')[0]) { name = QS_city_parent[i].split(',')[1]; } } } else { for (var i in QS_city) { if (QS_city[i]) { var iArr = QS_city[i].split('`'); for (var j = 0; j < iArr.length; j++) { if (id == iArr[j].split(',')[0]) { name = iArr[j].split(',')[1]; } if(fid == iArr[j].split(',')[0]){ cityname = iArr[j].split(',')[1] } } } } } return cityname+name; } // 复原checkbox选中 function recoverCheckbox() { for (var i = 0; i < checkedPool.length; i++) { $('.checkOption').each(function(index, el) { if ($(this).data('code') == checkedPool[i].split('`')[0]) { $(this).closest('label').addClass('selected'); $(this).prop('checked', !0); } }) } } // 清空 $('#J_clear_all').off().on('click', function() { checkedPool.splice(0, checkedPool.length); $('.checkOption:checked').each(function() { $(this).prop('checked', 0); $(this).closest('label').removeClass('selected'); }) syncOptionSelected(); }) // 确定 $('#J_btn_yes_city').off().on('click', function() { var checkedArray = $('.checkOption:checked'); var codeArray = new Array(); var textArray = new Array(); var keepArray = new Array(); for (var i = 0; i < checkedPool.length; i++) { keepArray[i] = checkedPool[i].split('`')[0]; codeArray[i] = checkedPool[i].split('`')[0].split('.')[checkedPool[i].split('`')[0].split('.').length-1]; textArray[i] = checkedPool[i].split('`')[1]; } $('[data-toggle="funCityModal"][data-multiple="true"]').find('.J_resultcode_city').val(codeArray.join(',')); $('[data-toggle="funCityModal"][data-multiple="true"]').find('.J_resultcode_city').attr('keep', keepArray.join(',')); $('[data-toggle="funCityModal"][data-multiple="true"]').find('.J_resuletitle_city').text(textArray.length ? textArray.join('+') : '请选择'); $('[data-toggle="funCityModal"][data-multiple="true"]').find('.J_resuletitle_city').attr('title', textArray.length ? textArray.join('+') : '请选择'); removeModal(); }) // 同步 function syncOptionSelected() { if (checkedPool.length) { //console.log("sync"+checkedPool); var checkedHtml = ''; for (var i = 0; i < checkedPool.length; i++) { var pollArr = checkedPool[i].split('`'); checkedHtml += '
' + pollArr[1] + '
'; } $('.J_cate_box').html(checkedHtml); $('.J_selected_group').addClass('open'); } else { $('.J_selected_group').removeClass('open'); } $('.J_s_i').off().on('click', function() { var sCode = $(this).closest('.s-cell').data('code'); var sSub = $(this).closest('.s-cell').data('code') + '`' + $(this).closest('.s-cell').data('text'); checkedPool.splice($.inArray(sSub, checkedPool), 1); $('.checkOption:checked').each(function() { if ($(this).data('code') == sCode) { $(this).prop('checked', 0); $(this).closest('label').removeClass('selected'); } }) syncOptionSelected(); }) } // 生成checkbox function checkboxFactory(id, title) { var checkboxHtml = '
'; checkboxHtml += '
' + title + '
'; checkboxHtml += '
    '; if (QS_city[id]) { var checkArr = QS_city[id].split('`'); for (var i = 0; i < checkArr.length; i++) { var arrP = checkArr[i].split(','); checkboxHtml += '
  • '; } } else { id = $('.categorySelect').eq($('.categorySelect').length-1).find('option:selected').val(); checkboxHtml += '
  • '; } checkboxHtml += '
'; checkboxHtml += '
'; return checkboxHtml; } }) // 初始化程序 function prepareModal(titleValue, multipleValue, maximumValue) { var ie = !-[1, ]; var ie6 = !-[1, ] && !window.XMLHttpRequest; $(backdropLayerTpl).appendTo($(document.body)); if (ie6) { $('.modal_backdrop').css("height", $(document).height()); } $(htmlLayerTpl).appendTo($(document.body)); $('.J_modal_title').text(titleValue); if (multipleValue) { $('.J_modal_max').text('(最多选择' + maximumValue + '个)'); } if (!multipleValue) { $('.modal_footer').hide(); } $(".J_hoverbut").hover(function() { $(this).addClass("hover"); }, function() { $(this).removeClass("hover"); }) // 可拖动 var newObj = $('.modal_dialog'); var newTit = newObj.find(".modal_header"); newTit.mousedown(function(e) { var offset = newObj.offset(); var x = e.pageX - offset.left; var y = e.pageY - offset.top; $(document).bind('mousemove', function(ev) { newObj.bind('selectstart', function() { return false; }) var newx = ev.pageX - x; var newy = ev.pageY - y; newObj.css({ 'left': newx + "px", 'top': newy + "px" }) }) }) $(document).mouseup(function() { $(this).unbind("mousemove"); }) if (ie) { if (window.PIE) { $('.pie_about').each(function() { PIE.attach(this); }) } } } // 关闭 $(document).off('click','.J_dismiss_modal').on('click','.J_dismiss_modal', function() { removeModal(); }) // esc关闭 $(document).on('keydown', function(event) { if (event.keyCode == 27) { removeModal(); } }) //关闭弹窗的公共方法 function removeModal() { setTimeout(function() { $('.modal_backdrop').remove(); $('.modal').remove(); }, 50) } }(window.jQuery);