<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          jquery插件實現(xiàn)省市縣三級聯(lián)動功能效果

          共 39689字,需瀏覽 80分鐘

           ·

          2020-12-20 12:51

          點擊上方?java項目開發(fā)選擇?設為星標

          優(yōu)質文章,及時送達

          --

          案例功能效果圖

          前端頁面效果圖

          環(huán)境介紹

          前端:vue+h5


          完整源碼獲取方式



          源碼獲取方式

          掃碼關注回復【ssx】獲取完整源碼


          如果你在運行這個代碼的過程中有遇到問題,請加小編微信xxf960513,我拉你進對應微信學習群??!幫助你快速掌握這個功能代碼!




          核心代碼介紹

          city-select.css


             q, blockquote {    quotes: none}
          q:before, q:after, blockquote:before, blockquote:after { content: ""; content: none}
          a img { border: none}
          article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block}
          .clearfix, .city-select .city-cont dl, .city-select .city-txt { *zoom: 1}
          .clearfix:after, .city-select .city-cont dl:after, .city-select .city-txt:after { content: " "; display: table; height: 0; clear: both}
          .city-select { font-size: 0; position: relative; display: inline-block}
          .city-select .city-cont dl, .city-select .city-txt { *zoom: 1}
          .city-select .city-cont dl:after, .city-select .city-txt:after { content: " "; display: table; height: 0; clear: both}
          .city-select.down .city-info { border-bottom: none}
          .city-select.down .city-info:after { border-top: none; border-bottom: 6px solid #ccc}
          .city-select.multi .city-pavilion + .city-info .not-search { display: none}
          .city-select.multi .city-pavilion + .city-info .not-search[class~="not-val"] { display: block}
          .city-select.multi .city-pavilion.hide + .city-info .city-input { display: none}
          .city-select.multi .city-pavilion.hide + .city-info .city-input[class~="not-val"] { display: block}
          .city-select.multi .city-pavilion + .multi-type .city-input { display: block}
          .city-select.multi .city-pavilion.hide + .multi-type .city-input[class~="not-val"] { display: block}
          .city-select.multi .city-pavilion.hide + .multi-type .search-show { display: block}
          .city-select.disabled .city-info { background-color: #eef1f6; cursor: not-allowed}
          .city-select.disabled .city-info span { background-color: #eef1f6}
          .city-select.disabled .city-info span:hover i { display: none}
          .city-select.disabled .city-info span + .city-input { display: none}
          .city-select.disabled .city-info input { cursor: not-allowed}
          .city-select.readonly .city-info { cursor: default}
          .city-select.readonly .city-info span:hover i { display: none}
          .city-select.readonly .city-info span + .city-input { display: none}
          .city-select.readonly .city-info input { cursor: default}
          .city-select .city-info { border: 1px solid #ccc; background-color: #fcfcfc; cursor: pointer; width: 280px; overflow: hidden; padding: 8px; padding-top: 0; position: relative; z-index: 2}
          .city-select .city-info:after { content: ''; border-right: 6px solid transparent; border-left: 6px solid transparent; border-top: 6px solid #ccc; border-radius: 2px; display: block; width: 0; height: 0; position: absolute; top: 17px; right: 5px; -moz-transition: border .2s; -o-transition: border .2s; -webkit-transition: border .2s; transition: border .2s}
          .city-select .city-info.multi-type span { background: none; padding: 5px 0; margin-right: 0}
          .city-select .city-info.multi-type .span-over { width: 99%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap}
          .city-select .city-info.multi-type .city-input { display: block; width: 100%}
          .city-select .city-info.multi-type .city-input.hide { display: none}
          .city-select .city-info span { background-color: #f5f5f5; border-radius: 2px; color: #666; cursor: default; font-size: 14px; display: inline-block; vertical-align: middle; padding: 5px; margin-right: 5px; position: relative}
          .city-select .city-info span + .city-input { width: auto}
          .city-select .city-info span i { color: #fff; cursor: pointer; background: #ffbfbf; border-radius: 100%; display: block; width: 14px; height: 14px; line-height: 14px; text-align: center; font-size: 0; position: absolute; top: -5px; right: -5px; z-index: 1; visibility: hidden; opacity: 0; -moz-transition: all 1s; -o-transition: all 1s; -webkit-transition: all 1s; transition: all 1s}
          .city-select .city-info span i:after { content: '\D7'; font-size: 12px}
          .city-select .city-info span:hover i { visibility: visible; opacity: 1}
          .city-select .city-info .city-input, .city-select .city-info span { display: inline-block; vertical-align: middle; margin-top: 8px}
          .city-select .city-input { width: 100%; position: relative; overflow: hidden}
          .city-select .city-input.hide { display: none}
          .city-select .city-input em { color: #999; display: block; font-style: normal; font-size: 12px; height: 24px; line-height: 24px}
          .city-select input[type="text"] { background: transparent; border: none; box-sizing: border-box; color: #333; font-size: 12px; width: 100%; height: 24px; line-height: 24px \9; padding: 0 5px; outline: none}
          .city-select .city-pavilion, .city-select .city-list { border: 1px solid #ccc; background: #fff; position: absolute; top: 100%; z-index: 999; left: 0; margin-top: -1px; transition-duration: 400ms; transform: translateY(0); opacity: 1; visibility: visible}
          .city-select .city-pavilion.hide, .city-select .city-list.hide { transform: translateY(-2%); opacity: 0; visibility: hidden}
          .city-select .city-pavilion { box-shadow: 0 2px 5px #ddd; width: 467px}
          .city-select .city-tabs { border-bottom: 1px solid #ccc; background: #fbfbfb; font-size: 0}
          .city-select .city-tabs a { border-bottom: 1px solid transparent; display: inline-block; font-size: 14px; color: #666; padding: 0 6px; height: 36px; line-height: 36px; text-align: center; position: relative; bottom: -1px; -moz-transition: all 1s; -o-transition: all 1s; -webkit-transition: all 1s; transition: all 1s}
          .city-select .city-tabs a:hover { border-bottom-color: #000}
          .city-select .city-tabs a.active { border-bottom-color: #02aec7; color: #02aec7; cursor: default}
          .city-select .city-tabs a.forbid { color: #bbb; cursor: not-allowed}
          .city-select .city-tabs a.forbid:hover { border-bottom-color: transparent}
          .city-select .city-cont { padding-top: 20px; padding-left: 20px; font-size: 0; position: relative; max-height: 200px; overflow-x: hidden; overflow-y: auto}
          .city-select .city-cont dl:first-child dd { margin-left: 0}
          .city-select .city-cont dt, .city-select .city-cont dd { display: inline-block; vertical-align: top; float: left}
          .city-select .city-cont dt { color: #02aec7; font-size: 16px; width: 28px}
          .city-select .city-cont dd { font-size: 14px; width: 421px; margin-top: -10px; margin-left: -10px; padding-bottom: 20px}
          .city-select .city-cont dd a { color: #666; display: inline-block; padding: 5px 7px; margin-top: 5px; margin-left: 5px; -moz-transition: all .5s; -o-transition: all .5s; -webkit-transition: all .5s; transition: all .5s}
          .city-select .city-cont dd a:hover { background: #f5f5f5; border-radius: 2px}
          .city-select .city-cont dd a.active { background: #02aec7; border-radius: 2px; color: #fff; box-shadow: 0 0 5px #ddd}
          .city-select .city-cont dl { transition-duration: 400ms; opacity: 1; transform: translateX(0)}
          .city-select .city-cont dl.hide { display: none; opacity: 0; transform: translateX(5%)}
          .city-select .city-list { font-size: 0; width: 298px; max-height: 170px; overflow-x: hidden; overflow-y: auto; box-sizing: border-box}
          .city-select .city-list li { border-top: 1px solid #ccc; border-bottom: 1px solid #ccc; cursor: pointer; padding: 10px 5px; position: relative; margin-bottom: -1px}
          .city-select .city-list li:first-child { border-top: none}
          .city-select .city-list li:hover { background-color: #f9f9f9}
          .city-select .city-list li.active { border-left: 2px solid #02aec7; background-color: #f0fbfd}
          .city-select .city-list li.hover { border-bottom-color: #02aec7; background-color: #f9f9f9; z-index: 2}
          .city-select .city-list li.hover span { text-indent: 10px}
          .city-select .city-list li.not-have { background-color: #fff; color: #999; font-size: 14px; cursor: not-allowed; line-height: 1.5; padding: 5px}
          .city-select .city-list li.not-have strong { color: #02aec7; font-style: normal; padding: 0 5px}
          .city-select .city-list span { display: inline-block; font-size: 14px; width: 50%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; -moz-transition: all .5s; -o-transition: all .5s; -webkit-transition: all .5s; transition: all .5s}
          .city-select .city-list span.spell { text-align: right; font-size: 12px; color: #02aec7}
          .city-select .city-txt { color: #999; font-size: 12px; margin-bottom: 10px; vertical-align: text-bottom; padding-top: 10px; padding-left: 20px}
          .city-select .city-txt a, .city-select .city-txt span { display: block; float: right; margin-right: 10px; vertical-align: top}
          .city-select .city-txt em { font-style: normal}
          .city-select .city-txt a { color: #dc8383; margin-top: -3px}
          .city-select .city-txt a:hover { color: #02aec7}
          .city-select .city-txt a i { background: url(http://images.vrm.cn/2017/07/26/del.png) no-repeat; width: 16px; height: 16px; display: inline-block; vertical-align: middle}
          .city-select .city-txt span { letter-spacing: 2px}
          .city-select .city-txt i { color: #02aec7}
          .city-select .city-tips { background: rgba(0, 0, 0, 0.7); border-radius: 2px; color: #fff; font-size: 14px; text-align: center; padding: 0 10px; position: absolute; top: 5px; left: 50%; line-height: 36px; margin-left: -50px; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#B200000, endColorstr=#B200000); transition-duration: 400ms; transform: translateY(0); opacity: 1; visibility: visible; z-index: 5}
          .city-select .city-tips.hide { transform: translateY(5%); opacity: 0; visibility: hidden}

          Cityselect.js

          (function ($, window) {    var functionality = {};
          /** * 構造器 */ function Cityselect(options, selector) { this.options = $.extend({}, Cityselect.defaults, options); this.$selector = $(selector); this.multiSelectResult = []; this.multiSelectResultId = []; this.provinceId = []; this.whole = []; this.values = []; this.selectIndex = 0; this.isfocus = true;
          this.init(); }
          /** * 默認參數(shù) */ Cityselect.defaults = { dataJson: null, convert: true, whole: false, shorthand: false, search: true, multiSelect: false, multiMaximum: 5, multiType: 0, mosaic: ',', placeholder: '請選擇城市', searchPlaceholder: '輸入關鍵詞搜索', hotCity: [], onInit: function () {}, onForbid: function () {}, onTabsAfter: function (target) {}, onTabsForbid: function (target) {}, onCallerAfter: function (target, values) {} };
          /** * 內部函數(shù) */ functionality.recombine = function (data) { var resultId = [], result = [], province = [];
          // 篩選出省份的ID $.each(data, function (key, value) { if (value.parentId === '100000') { resultId.push(value.id); province.push(value); } });
          // 根據(jù)省份ID,查找出所有的城市 for (var i = 0; i < resultId.length; i++) { $.each(data, function (key, value) { if (resultId[i] === value.parentId) { result.push(value); } }); }
          // 存儲省份 this.province = province;
          // 篩選出除了省份外的數(shù)據(jù) functionality.whole.call(this);
          return result; }
          functionality.whole = function () { var self = this, result = [];
          $.each(self.options.dataJson, function (key, value) { if (value.id !== '100000' && value.parentId !== '100000') { result.push(value); } });
          self.whole = result; }
          functionality.filter = function (parameter) { var configure = parameter;
          // 包含市縣級數(shù)據(jù),否則市級數(shù)據(jù) configure.contain = configure.options.whole ? configure.whole : configure.newCityData;
          //分類的城市 parameter.filterCity = { HOT: [], A: [], B: [], C: [], D: [], E: [], F: [], G: [], H: [], I: [], J: [], K: [], L: [], M: [], N: [], O: [], P: [], Q: [], R: [], S: [], T: [], U: [], V: [], W: [], X: [], Y: [], Z: [] };
          $.each(configure.contain, function (key, value) { //匹配城市數(shù)據(jù) switch (value.letter) { case ('A'): parameter.filterCity.A.push(value); break; case ('B'): parameter.filterCity.B.push(value); break; case ('C'): parameter.filterCity.C.push(value); break; case ('D'): parameter.filterCity.D.push(value); break; case ('E'): parameter.filterCity.E.push(value); break; case ('F'): parameter.filterCity.F.push(value); break; case ('G'): parameter.filterCity.G.push(value); break; case ('H'): parameter.filterCity.H.push(value); break; case ('I'): parameter.filterCity.I.push(value); break; case ('J'): parameter.filterCity.J.push(value); break; case ('K'): parameter.filterCity.K.push(value); break; case ('L'): parameter.filterCity.L.push(value); break; case ('M'): parameter.filterCity.M.push(value); break; case ('N'): parameter.filterCity.N.push(value); break; case ('O'): parameter.filterCity.O.push(value); break; case ('P'): parameter.filterCity.P.push(value); break; case ('Q'): parameter.filterCity.Q.push(value); break; case ('R'): parameter.filterCity.R.push(value); break; case ('S'): parameter.filterCity.S.push(value); break; case ('T'): parameter.filterCity.T.push(value); break; case ('U'): parameter.filterCity.U.push(value); break; case ('V'): parameter.filterCity.V.push(value); break; case ('W'): parameter.filterCity.W.push(value); break; case ('X'): parameter.filterCity.X.push(value); break; case ('Y'): parameter.filterCity.Y.push(value); break; case ('Z'): parameter.filterCity.Z.push(value); break; default: }
          //如果有設置熱門城市,就輸出設置的,反正就去取默認城市前面18條做熱門城市 if (parameter.options.hotCity.length < 1 && key < 18) { parameter.filterCity.HOT.push(value); } else { $.each(parameter.options.hotCity, function (hkey, hvaluef) { if (hvaluef === value.name) { parameter.filterCity.HOT.push(value); } }); } });
          return parameter.filterCity; }
          functionality.montage = function (citydata, letter) { var self = this, data = citydata === 0 ? self.filterCity : citydata, html = '', name;
          $.each(data, function (key, value) {
          name = self.options.shorthand ? value.shortName : value.name; //顯示的是簡稱還是全稱
          if (citydata < 1) {
          if (letter === key) {
          $.each(value, function (lkey, lvalue) { name = self.options.shorthand ? lvalue.shortName : lvalue.name; //顯示的是簡稱還是全稱
          html += ''" data-id="' + lvalue.id + '" data-title="' + name + '" data-letter="' + lvalue.letter + '">' + name + '';
          });
          }
          } else {
          html += '
        2. '" data-id="' + value.id + '" data-title="' + name + '" data-letter="' + value.letter + '">' + '' + name + '' + '' + value.pinyin + '' + '
        3. '; }
          });
          return html; }
          functionality.template = [ '
          ', '
          ', '熱門城市', 'AB', 'CD', 'EFG', 'HI', 'JK', 'LM', 'NOP', 'QR', 'S', 'TU', 'VWX', 'Y', 'Z', '
          ', '
          ', '{cont}', '
          ', '

          ', '清空0/{maxnum}', '*可以直接搜索查找城市(支持名稱、拼音模糊搜索)', '

          ', '
          ', '
          ', '{name}', '
          ', '', '
          ', '
          ', '
            '
            ,
            '
            最多只能選擇{tipnum}
            '
            ];
            functionality.split = function (str) { var letArray = [];
            for ( var i = 0; i < str.length; i++ ) { letArray.push(str[i]); }
            return letArray; } functionality.groupArray = [ 'HOT', 'AB', 'CD', 'EFG', 'HI', 'JK', 'LM', 'NOP', 'QR', 'S', 'TU', 'VWX', 'Y', 'Z' ];
            functionality.showDrop = function (event) { var self = this, configure = self.options, $target = $(event.target);
            //禁止點擊后的回調 if ($(event.currentTarget).hasClass('forbid')) { configure.onForbid.call(self); return false; }
            //點擊刪除 if ($target.hasClass('del')) { functionality.deletes.call(self, $target); return false; }
            self.isfocus = true; self.$selector.addClass('down').find('.city-pavilion').removeClass('hide').siblings('.city-list').addClass('hide');
            $(event.currentTarget).find('.input-search').focus();
            //有值就加選中狀態(tài) functionality.defSelected.call(self); }
            functionality.tabs = function (event) { var $target = $(event.target), configure = this.options, letter = $target.data('letter'); //tabs禁止點擊后的回調 if ($target.hasClass('forbid')) { configure.onTabsForbid.call(self, $target); return false; }
            //添加選中狀態(tài) $target.addClass('active').siblings().removeClass('active');
            //顯示對應索引的城市列表 this.$selector.find('dl').addClass('hide').siblings('.city-'+ letter).removeClass('hide');
            //切換列表回調 configure.onTabsAfter.call(this, $target); }
            functionality.singleAchieve = function (event) { var $target = $(event.currentTarget), $input = this.$selector.find('.input-search'), $cityInfo = this.$selector.find('.city-info'), configure = this.options, parentId = $target.attr('data-parentid'), id = $target.attr('data-id'), name = $target.data('title');
            //存儲選中的值 this.values = []; this.values.push({ 'name': name, 'id': id, 'parentId': parentId });
            //添加選中狀態(tài) this.$selector.find('.caller').removeClass('active'); this.$selector.find('.caller[data-id="'+ id +'"]').addClass('active');
            //賦值選中的給文本框 $cityInfo.find('span').remove(); this.$selector.find('.city-input').before(''" data-parentid="'+ parentId +'">'+ name +'').find('.input-search').val('');
            //調整文本框位置 functionality.singleResize.call(this);
            //隱藏彈窗 this.$selector.removeClass('down').find('.city-pavilion, .city-list').addClass('hide');
            //沒有開啟搜索且數(shù)組是不為空 if (!this.options.search && this.values.length > 0) { this.$selector.find('.city-input').addClass('hide'); }
            //選擇之后的回調 configure.onCallerAfter.call(this, $target, this.values[0]); }
            functionality.multiAchieve = function (event) { var self = this, $selector = self.$selector, $target = $(event.currentTarget), $input = $selector.find('.input-search'), configure = self.options, parentId = $target.attr('data-parentid'), id = $target.attr('data-id'), name = $target.data('title'), inputVal = $input.val(), hasActive = $target.hasClass('active'), joinSpan, mosaicName;
            if (!hasActive) { //選中的是否大于限制的 if (self.selectIndex >= configure.multiMaximum) { $selector.find('.city-tips').removeClass('hide');
            setTimeout(function() { $selector.find('.city-tips').addClass('hide'); }, 1000);
            return false; }
            //選擇的城市 if ($.inArray(name, self.multiSelectResult) < 0) { self.multiSelectResult.push(name); self.multiSelectResultId.push(id); self.provinceId.push(parentId);
            //拼接生成選中值 joinSpan = ''" data-parentid="'+ parentId +'">'+ name +'';
            //添加選中狀態(tài) $selector.find('.caller[data-id="'+ id +'"]').addClass('active');
            //添加選中的城市顯示方式 if (configure.multiType < 1) { $selector.find('.city-input').before(joinSpan); }
            //選中數(shù) self.selectIndex += 1; }
            } else { //刪除去掉選中城市 self.multiSelectResult.splice($.inArray(name, self.multiSelectResult), 1); self.multiSelectResultId.splice($.inArray(id, self.multiSelectResultId), 1); self.provinceId.splice($.inArray(parentId, self.provinceId), 1);
            //去掉選中狀態(tài) $selector.find('.caller[data-id="'+ id +'"]').removeClass('active');
            //刪除選中的城市 $selector.find('.city-info').find('span[data-id="'+ id +'"]').remove();
            //選中數(shù) self.selectIndex -= 1; }
            //存儲選中的值 self.values = []; self.multiSelectResult.length > 0 ? self.values.push({ 'name': self.multiSelectResult, 'id': self.multiSelectResultId, 'parentId': self.provinceId }) : '';
            //拼接后的選中name mosaicName = self.multiSelectResult.join(configure.mosaic);
            //添加選中的城市顯示方式 if (configure.multiType === 1) { $selector.find('.city-name').html(''">'+ mosaicName +''); }
            //有選中就清除,沒有值就添加 if (self.selectIndex < 1) { $selector.find('.city-input').addClass('not-val'); $selector.find('.span-over').remove(); } else { $selector.find('.city-input').removeClass('not-val'); }
            //添加選中數(shù) $selector.find('.city-count').find('i').text(self.selectIndex);
            //選擇之后的回調 configure.onCallerAfter.call(self, $target, self.values[0]); }
            functionality.search = function (event) { var self = this, $target = $(event.target), configure = this.options, keyCode = event.keyCode, inputVal = $target.val(), result = [], resultHtml;
            //如果是按下shift/ctr/左右/command鍵不做事情 if (keyCode === 16 || keyCode === 17 || keyCode === 18 || keyCode === 37 || keyCode === 39 || keyCode === 91 || keyCode === 93) { return false; }
            //如果不是按下enter/上下鍵的就做搜索事情 if (keyCode !== 13 && keyCode !== 38 && keyCode !== 40) {
            self.isfocus = false; $.each(self.contain, function(key, value) { //拼音或者名稱搜索 if(value.pinyin.toLocaleLowerCase().search(inputVal.toLocaleLowerCase()) > -1 || value.name.search(inputVal) > -1 || value.id.search(inputVal) > -1 ){ result.push(value); } });
            resultHtml = result.length > 0 ? functionality.montage.call(self, result) : '
          • 沒有找到'+ inputVal +'相關城市
          • '
            ;

            self.$selector.find('.city-list').html(resultHtml);
            //有值就加選中狀態(tài) functionality.defSelected.call(self);
            //彈窗隱藏,搜索列表顯示 functionality.searchShow.call(self); }
            return false; }
            functionality.searchShow = function (event) { this.$selector.addClass('down').find('.city-pavilion').addClass('hide'); this.$selector.find('.city-input').addClass('search-show'); this.$selector.find('.city-list').removeClass('hide'); }
            functionality.defSelected = function (event) { var self = this;
            //有選中的,就添加選中狀態(tài) if (self.values.length > 0) { if (self.values[0].id instanceof Array) { $.each(self.values[0].id, function (key, value) { self.$selector.find('.caller[data-id="'+ value +'"]').addClass('active'); }); } else { self.$selector.find('.caller[data-id="'+ self.values[0].id +'"]').addClass('active'); } } }
            functionality.operation = function (event) { var self = this, $selector = self.$selector, $cityList = $selector.find('.city-list'), $target = $(event.target), $items = $cityList.find('.caller'), hasNothave = $cityList.find('li').hasClass('not-have'), keyCode = event.keyCode, index = 0, direction, itemIndex;
            //按下enter鍵,執(zhí)行選中事件 if (keyCode === 13) {
            $cityList.find('.caller.hover').trigger('click');
            return false; } //按下上下鍵 if (keyCode === 38 || keyCode === 40) { //方向 direction = keyCode === 38 ? -1 : 1;
            //選中的索引 itemIndex = $items.index($cityList.find('.caller.hover'));
            if (itemIndex < 0) { index = direction > 0 ? -1 : 0; } else { index = itemIndex; }
            //鍵盤去選擇的索引 index = index + direction;
            //循環(huán)選擇 index = index === $items.length ? 0 : index;
            //添加選中狀態(tài) $items.removeClass('hover').eq(index).addClass('hover');
            if (!hasNothave) { //滾動條跟隨定位 functionality.scroll.call(self); }
            return false;
            }
            }
            functionality.scroll = function (event) { var self = this, $cityList = self.$selector.find('.city-list'), $callerHover = $cityList.find('.caller.hover'), oh = $cityList.outerHeight(), ch = $callerHover.outerHeight() + 1, dy = $callerHover.position().top, sy = $cityList.scrollTop();
            $cityList.animate({ scrollTop: dy + ch - oh + sy }, 200); }
            functionality.singleResize = function () { var self = this, $selector = self.$selector, $cityInfo = $selector.find('.city-info'), _iw = $cityInfo.outerWidth(), _p = $cityInfo.innerWidth() - $cityInfo.width(), _sw = $cityInfo.find('span').outerWidth(true);
            $selector.find('.city-input').width(_iw - _sw - _p - 2); }
            functionality.multiResize = function () { var self = this, $selector = self.$selector, _h = $selector.outerHeight(true) - 1;
            $selector.find('.city-pavilion, .city-list').animate({ 'top': _h }, 10); }
            functionality.forbid = function () { var self = this;
            $.each(self.$selector.find('.city-cont').find('dl'), function (key, value) { var _this = $(value), _letter = _this.data('letter');
            if (!$(value).text()) { self.$selector.find('.tab-a[data-letter="'+ _letter +'"]').addClass('forbid'); } });
            }
            functionality.deletes = function (target) { var self = this, $target = target, $parent = $target.parent(), name = $parent[0].innerText, id = $parent.attr('data-id'), parentId = $parent.data('parentid');
            //刪除去掉選中城市 self.multiSelectResult.splice($.inArray(name, self.multiSelectResult), 1); self.multiSelectResultId.splice($.inArray(id, self.multiSelectResultId), 1); self.provinceId.splice($.inArray(parentId, self.provinceId), 1);
            //存儲剩下城市的值 self.values = []; self.multiSelectResult.length > 0 ? self.values.push({ 'name': self.multiSelectResult, 'id': self.multiSelectResultId, 'parentId': self.provinceId }) : '';
            //刪除 $parent.remove(); self.$selector.find('.caller[data-id="'+ id +'"]').removeClass('active');
            //如果是多選才執(zhí)行以下事情 if (self.options.multiSelect) { self.selectIndex -= 1; self.$selector.find('.city-count').find('i').text(self.selectIndex);
            //數(shù)組是空 self.values.length < 1 ? self.$selector.find('.city-input').addClass('not-val') : ''; } else { //調整文本框位置 functionality.singleResize.call(self);
            } }
            /** * 原型方法 */ Cityselect.prototype.init = function () { var self = this, configure = this.options;
            //開啟轉換就用新的json,否則就用正常格式 self.newCityData = configure.convert ? functionality.recombine.call(self, configure.dataJson) : configure.dataJson;
            //城市分類生成json functionality.filter(self);
            //主結構生成輸出 self.createSubject();
            //綁定事件 self.bindEvent();
            //初始化回調 configure.onInit.call(self); };
            Cityselect.prototype.groupCity = function () { var self = this, domtel = '', letterStr, groupArray, list, montage, hide;
            for ( var i = 0; i < functionality.groupArray.length; i++ ) { //字母數(shù)組 groupArray = functionality.groupArray[i];
            //不是熱點城市的字母就不做拆分處理 letterStr = groupArray !== 'HOT' ? functionality.split(groupArray) : '';
            //添加隱藏class hide = i > 0 ? ' hide' : '';
            //創(chuàng)建對應的dl domtel += '
            '" data-letter="'+ groupArray +'">{dl}
            '
            ;

            if (letterStr && letterStr.length > 1) {
            list = '';
            for (var j = 0; j < letterStr.length; j++) {
            montage = functionality.montage.call(self, 0, letterStr[j]);
            //不為空就執(zhí)行下面創(chuàng)建節(jié)點 if (montage) {
            list += '
            '+ letterStr[j] +'
            '
            +
            '
            '+ montage +'
            '
            ;

            }
            }
            } else {
            montage = functionality.montage.call(self, 0, groupArray); //不為空就執(zhí)行下面創(chuàng)建節(jié)點 if (montage) {
            list = groupArray !== 'HOT' ? '
            '+ groupArray +'
            '
            +
            '
            '+ functionality.montage.call(self, 0, groupArray) +'
            '
            :
            '
            '+ functionality.montage.call(self, 0, groupArray) +'
            '
            ;

            }
            }
            domtel = domtel.replace('{dl}', list); }
            return domtel; };
            Cityselect.prototype.createSubject = function () { var self = this, configure = self.options, template = functionality.template.join('');
            //添加搜索默認文本提示 template = template.replace('{placeholder}', configure.searchPlaceholder);
            //添加多選提示最大選擇數(shù) template = template.replace('{maxnum}', configure.multiMaximum); template = template.replace('{tipnum}', configure.multiMaximum);
            //添加多選選中的值顯示的方式 template = template.replace('{type}', configure.multiType === 1 ? ' multi-type' : '');
            //添加多選選中的值顯示的方式 template = template.replace('{name}', configure.multiType === 1 ? '
            '
            : '');

            //添加多選class configure.multiSelect ? self.$selector.addClass('multi') : '';
            template = template.replace('{not}', 'not-val not-search');
            //把城市彈窗dom添加到容器中 self.$selector.html(template.replace('{cont}', self.groupCity()));
            //單選就去掉 !configure.multiSelect ? self.$selector.find('.city-count').html(''): '';
            //沒有開啟搜索,就remove掉搜索dom
            if (!configure.search) { self.$selector.find('.city-input').addClass('not-search').html(''+ configure.placeholder +''); self.$selector.find('.city-txt').find('em').remove(); } else { self.$selector.find('.city-input').removeClass('not-search'); }
            //沒有數(shù)據(jù)輸出的就添加禁止點擊 functionality.forbid.call(self); }
            Cityselect.prototype.bindEvent = function (event) { var self = this, configure = self.options, $selector = self.$selector;
            //顯示城市-彈窗 $selector.on('click.cityselect', '.city-info', $.proxy(functionality.showDrop, self));
            //tabs-切換索引的城市顯示 $selector.on('click.cityselect', '.tab-a', $.proxy(functionality.tabs, self));
            //點擊選擇城市 $selector.on('click.cityselect', '.caller', $.proxy(configure.multiSelect ? functionality.multiAchieve : functionality.singleAchieve, self));
            //點擊清空 $selector.on('click.cityselect', '.empty', $.proxy(self.clear, self));
            //搜索 $selector.on('keyup.cityselect', '.input-search', $.proxy(functionality.search, self));
            //鍵盤切換列表 $selector.on('keydown.cityselect', $.proxy(functionality.operation, self)); }
            Cityselect.prototype.unBindEvent = function (event) { var self = this, $selector = self.$selector; $selector.off('click.cityselect', '.city-info');
            $selector.off('click.cityselect', '.tab-a');
            $selector.off('click.cityselect', '.caller');
            $selector.off('click.cityselect', '.empty');
            $selector.off('keyup.cityselect', '.input-search');
            $selector.off('keydown.cityselect'); }
            Cityselect.prototype.setCityVal = function (val) { var self = this, configure = self.options, setCity = val.replace(/\s/g, ''), cityArray = setCity.split(','), name, joinSpan, mosaicName;
            if (val) { //存儲設置城市變量 self.cityVal = val; //根據(jù)多選還是單選,多選不能超過設定的個數(shù)輸出; 單選只能輸出一個,設置多個只會輸出第一個 !configure.multiSelect ? cityArray = cityArray.splice(0, 1) : cityArray = cityArray.splice(0, configure.multiMaximum);
            for (var i = 0; i < cityArray.length; i++) {
            $.each(self.newCityData, function (key, value) { name = self.options.shorthand ? value.shortName : value.name; //顯示的是簡稱還是全稱
            if (cityArray[i] === value.name) {
            self.multiSelectResult.push(name); self.multiSelectResultId.push(value.id); self.provinceId.push(value.parentId);
            //添加選中狀態(tài) self.$selector.find('.caller[data-id="'+ value.id +'"]').addClass('active');
            //選中的值拼接dom joinSpan = ''" data-parentid="'+ value.parentId +'">'+ name +'';
            //添加選中的城市顯示方式 if (configure.multiType < 1) { self.$selector.find('.city-input').before(joinSpan); } }
            });
            //如果是多選才執(zhí)行以下事情 if (self.options.multiSelect) { self.selectIndex = i + 1; self.$selector.find('.city-count').find('i').text(i + 1); }
            };
            //存儲設置城市的值 self.values = []; self.multiSelectResult.length > 0 ? self.values.push({ 'name': self.multiSelectResult, 'id': self.multiSelectResultId, 'parentId': self.provinceId }) : '';
            //拼接后的選中name mosaicName = self.multiSelectResult.join(configure.mosaic);
            //添加選中的城市顯示方式 if (configure.multiType === 1) { self.$selector.find('.city-name').html(''">'+ mosaicName +''); }
            //有值就去掉此class self.values.length > 0 ? self.$selector.find('.city-input').removeClass('not-val') : '';
            } }
            Cityselect.prototype.getCityVal = function () { //返回選中的城市 return this.values[0]; }
            Cityselect.prototype.update = function (data) { var self = this, template = functionality.template.join('');
            if (data.length > 0) { //重新更新城市數(shù)據(jù) self.newCityData = data; //重新生成城市分組 functionality.filter(self); //主結構生成輸出 self.createSubject(); //有設置城市默認的就重新設置 self.cityVal ? self.setCityVal(self.cityVal) : ''; } }
            Cityselect.prototype.clear = function () { //清空選中的值 this.multiSelectResult = []; this.multiSelectResultId = []; this.provinceId = []; this.values = []; this.selectIndex = 0; this.isfocus ? this.$selector.find('.input-search').val('').focus() : '';
            this.$selector.find('.caller').removeClass('active'); this.$selector.find('.city-count').find('i').text('0'); this.$selector.find('.city-info').find('span').remove();
            if (this.values.length < 1) { this.$selector.find('.city-input').removeClass('hide').addClass('not-val'); } }
            Cityselect.prototype.status = function (status) { var self = this, $cityInfo = self.$selector.find('.city-info');
            if (status === 'disabled') { self.$selector.addClass('disabled').find('.input-search').prop('disabled', true); self.unBindEvent(); } else if (status === 'readonly') { self.$selector.addClass('readonly').find('.input-search').prop('readonly', true); self.unBindEvent(); } }
            //點擊以外的地方就隱藏 $(document).on('click.cityselect', function (event) { var $citySelect = $('.city-select');
            if ($citySelect.find(event.target).length < 1) { $citySelect.removeClass('down').find('.city-pavilion, .city-list').addClass('hide'); $citySelect.find('.city-input').removeClass('search-show').find('.input-search').val(''); } });
            $.fn.citySelect = function (options) { return new Cityselect(options, this); };
            })(jQuery, window);
            -?END -

            推薦案例

            溫暖提示

            為了方便大家更好的學習,本公眾號經常分享一些完整的單個功能案例代碼給大家去練習,如果本公眾號沒有你要學習的功能案例,你可以聯(lián)系小編(微信:xxf960513)提供你的小需求給我,我安排我們這邊的開發(fā)團隊免費幫你完成你的案例。
            注意:只能提單個功能的需求不能要求功能太多,比如要求用什么技術,有幾個頁面,頁面要求怎么樣?


            請長按識別二維碼

            想學習更多的java功能案例請關注

            Java項目開發(fā)

            如果你覺得這個案例以及我們的分享思路不錯,對你有幫助,請分享給身邊更多需要學習的朋友。別忘了《留言+點在看》給作者一個鼓勵哦!

            瀏覽 43
            點贊
            評論
            收藏
            分享

            手機掃一掃分享

            分享
            舉報
            評論
            圖片
            表情
            推薦
            點贊
            評論
            收藏
            分享

            手機掃一掃分享

            分享
            舉報
            <kbd id="afajh"><form id="afajh"></form></kbd>
            <strong id="afajh"><dl id="afajh"></dl></strong>
              <del id="afajh"><form id="afajh"></form></del>
                  1. <th id="afajh"><progress id="afajh"></progress></th>
                    <b id="afajh"><abbr id="afajh"></abbr></b>
                    <th id="afajh"><progress id="afajh"></progress></th>
                    啪啪啪啪xxxx欧美 | 日本一区二区电影久久精品 | 婷婷精品伊人婷婷精品一区的 | 成人国产免费 | 在线吴梦梦视频一区二区 |