亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

jquery-weui地區選擇器改為時間季度選擇器

2024-04-27 15:15:13
字體:
來源:轉載
供稿:網友

city-picker.js更改后的代碼

// jshint ignore: start+function($){$.rawCitiesData = [];var quarters = ["第一季度", "第二季度", "第三季度", "第四季度"];var months = ["第一個月", "第二個月", "第三個月"];for(var i = 2014; i <= new Date().getFullYear(); i++) {  var tmpYear = {    "name" : i + "年",    "code" : i + "00",    "sub" : []  }  for (var j = 0; j < quarters.length; j++) {    var tmpQuarter = {      "name" : quarters[j],      "code" : i + "00" + j,      "sub" : []    }    for (var k = 0; k < months.length; k++) {      var tmpMonth = {        "name" : months[k],        "code" : i + "00" + j + k      }      tmpQuarter.sub.push(tmpMonth)    }    tmpYear.sub.push(tmpQuarter)  }  $.rawCitiesData.push(tmpYear);}}($);// jshint ignore: end/* global $:true *//* jshint unused:false*/+ function($) {  "use strict";  var defaults;  var raw = $.rawCitiesData;  var format = function(data) {    var result = [];    for(var i=0;i<data.length;i++) {      var d = data[i];      if(/^請選擇/.test(d.name)) continue;      result.push(d);    }    if(result.length) return result;    return [];  };  var sub = function(data) {    if(!data.sub) return [{ name: '', code: data.code }];    return format(data.sub);  };  var getCities = function(d) {    for(var i=0;i< raw.length;i++) {      if(raw[i].code === d || raw[i].name === d) return sub(raw[i]);    }    return [];  };  var getDistricts = function(p, c) {    for(var i=0;i< raw.length;i++) {      if(raw[i].code === p || raw[i].name === p) {        for(var j=0;j< raw[i].sub.length;j++) {          if(raw[i].sub[j].code === c || raw[i].sub[j].name === c) {            return sub(raw[i].sub[j]);          }        }      }    }  };  var parseInitValue = function (val) {    var p = raw[0], c, d;    var tokens = val.split(' ');    raw.map(function (t) {      if (t.name === tokens[0]) p = t;    });    p.sub.map(function (t) {      if (t.name === tokens[1]) c = t;    })    if (tokens[2]) {      c.sub.map(function (t) {        if (t.name === tokens[2]) d = t;      })    }    if (d) return [p.code, c.code, d.code];    return [p.code, c.code];  }  var toCode = function(raw, val) {    var p, c, d;    var tokens = val.split(' ');    raw.map(function (t) {      if (t.name === tokens[0]) p = t;    });    p.sub.map(function (t) {      if (t.name === tokens[1]) c = t;    })    if (tokens[2]) {      c.sub.map(function (t) {        if (t.name === tokens[2]) d = t;      })    }    if (d) return [p.code, c.code, d.code];    return [p.code, c.code];  }  $.fn.cityPicker = function(params) {    params = $.extend({}, defaults, params);    return this.each(function() {      var self = this;      var PRovincesName = raw.map(function(d) {        return d.name;      });      var provincesCode = raw.map(function(d) {        return d.code;      });      var initCities = sub(raw[0]);      var initCitiesName = initCities.map(function (c) {        return c.name;      });      var initCitiesCode = initCities.map(function (c) {        return c.code;      });      var initDistricts = sub(raw[0].sub[0]);      var initDistrictsName = initDistricts.map(function (c) {        return c.name;      });      var initDistrictsCode = initDistricts.map(function (c) {        return c.code;      });      var currentProvince = provincesName[0];      var currentCity = initCitiesName[0];      var currentDistrict = initDistrictsName[0];      var cols = [          {            displayValues: provincesName,            values: provincesCode,            CSSClass: "col-province"          },          {            displayValues: initCitiesName,            values: initCitiesCode,            cssClass: "col-city"          }        ];        if(params.showDistrict) cols.push({          values: initDistrictsCode,          displayValues: initDistrictsName,          cssClass: "col-district"        });      var config = {        cssClass: "city-picker",        rotateEffect: false,  //為了性能        formatValue: function (p, values, displayValues) {          return displayValues.join(' ');        },        onChange: function (picker, values, displayValues) {          var newProvince = picker.cols[0].displayValue;          var newCity;          if(newProvince !== currentProvince) {            var newCities = getCities(newProvince);            newCity = newCities[0].name;            var newDistricts = getDistricts(newProvince, newCity);            picker.cols[1].replaceValues(newCities.map(function (c) {              return c.code;            }), newCities.map(function (c) {              return c.name;            }));            if(params.showDistrict) picker.cols[2].replaceValues(newDistricts.map(function (d) {              return d.code;            }), newDistricts.map(function (d) {              return d.name;            }));            currentProvince = newProvince;            currentCity = newCity;            picker.updateValue();            return false; // 因為數據未更新完,所以這里不進行后序的值的處理          } else {            if(params.showDistrict) {              newCity = picker.cols[1].displayValue;              if(newCity !== currentCity) {                var districts = getDistricts(newProvince, newCity);                picker.cols[2].replaceValues(districts.map(function (d) {                  return d.code;                }), districts.map(function (d) {                  return d.name;                }));                currentCity = newCity;                picker.updateValue();                return false; // 因為數據未更新完,所以這里不進行后序的值的處理              }            }          }          //如果最后一列是空的,那么取倒數第二列          var len = (values[values.length-1] ? values.length - 1 : values.length - 2)          $(self).attr('data-code', values[len]);          $(self).attr('data-codes', values.join(','));          if (params.onChange) {            params.onChange.call(self, picker, values, displayValues);          }        },        cols: cols,        rawCitiesData : $.rawCitiesData,        toCode : toCode      };      if(!this) return;      var p = $.extend({}, params, config);      var val = $(this).val();      if (!val) val = '2017年 第一季度 第一個月';      currentProvince = val.split(" ")[0];      currentCity = val.split(" ")[1];      currentDistrict= val.split(" ")[2];      if(val) {        p.value = parseInitValue(val);        if(p.value[0]) {          var cities = getCities(p.value[0]);          p.cols[1].values = cities.map(function (c) {            return c.code;          });          p.cols[1].displayValues = cities.map(function (c) {            return c.name;          });        }        if(p.value[1]) {          if (params.showDistrict) {            var dis = getDistricts(p.value[0], p.value[1]);            p.cols[2].values = dis.map(function (d) {              return d.code;            });            p.cols[2].displayValues = dis.map(function (d) {              return d.name;            });          }        } else {          if (params.showDistrict) {            var dis = getDistricts(p.value[0], p.cols[1].values[0]);            p.cols[2].values = dis.map(function (d) {              return d.code;            });            p.cols[2].displayValues = dis.map(function (d) {              return d.name;            });          }        }      }      $(this).picker(p);    });  };  defaults = $.fn.cityPicker.prototype.defaults = {    showDistrict: true  };}($);

涉及到的樣式修改代碼jquery-weui.css中添加

.toolbar .cancel-picker {  position: absolute;  box-sizing: border-box;  height: 2.2rem;  line-height: 2.2rem;  color: #04BE02;  z-index: 1;  padding: 0 .5rem;}涉及到jquery-weui.js源碼中的修改

toolbarTemplate: '<div class="toolbar">/          <div class="toolbar-inner">/          <a href="javascript:;" class="cancel-picker">取消</a>/          <a href="Javascript:;" class="picker-button close-picker">{{closeText}}</a>/          <h1 class="title">{{title}}</h1>/          </div>/          </div>',添加了<a href="javascript:;" class="cancel-picker">取消</a>/

地區選擇器默認只要改變就實時的顯示到文本輸入框中,我的需求是點擊確定才改變值,點擊取消不改變。查看源碼發現

p.updateValue = function () {          var newValue = [];          var newDisplayValue = [];          for (var i = 0; i < p.cols.length; i++) {              if (!p.cols[i].divider) {                  newValue.push(p.cols[i].value);                  newDisplayValue.push(p.cols[i].displayValue);              }          }          if (newValue.indexOf(undefined) >= 0) {              return;          }          p.value = newValue;          p.displayValue = newDisplayValue;          if (p.params.onChange) {              p.params.onChange(p, p.value, p.displayValue);          }          if (p.input && p.input.length > 0) {              // $(p.input).val(p.params.formatValue ? p.params.formatValue(p, p.value, p.displayValue) : p.value.join(' '));              $(p.input).trigger('change');          }      };注釋掉的就是導致實時改變input框的代碼,將其移至確定按鈕點擊時間代碼中

$(document).on("click", ".close-picker", function() {        var pickerToClose = $('.weui-picker-modal.weui-picker-modal-visible');        if (pickerToClose.length > 0) {          $(p.input).val(p.params.formatValue ? p.params.formatValue(p, p.value, p.displayValue) : p.value.join(' '));          $.closePicker(pickerToClose);        }      });由于取消按鈕是后來添加的,所以也給其注冊點擊事件

  $(document).on("click", ".cancel-picker", function() {    var pickerToClose = $('.weui-picker-modal.weui-picker-modal-visible');    if (pickerToClose.length > 0) {      $.closePicker(pickerToClose);    }  });

發現一個bug,每次選擇完取消再點擊顯示的是新選擇的值而不是原來input正確的值,估計還是因為默認是實時顯示引起的。查看源碼

// Set value              if (!p.initialized) {                  if (p.params.value) {                      p.setValue(p.params.value, 0);                  }              }              else {                  var tmpCode = p.params.toCode(p.params.rawCitiesData, p.input.val());                  p.setValue(tmpCode, 0);                  // if (p.value) p.setValue(p.value, 0);              }注釋部分就是把change引起的新值顯示到控件上,所以只需要改為顯示input中的值。

p.params.toCode和p.params.rawCitiesData在config中配置,具體見city-picker.js

最后展示一下季度選擇器


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品中文在线观看| 91日本视频在线| 国产精品扒开腿做爽爽爽男男| 国产一区二区丝袜| 久久资源免费视频| 欧美一级视频免费在线观看| 九九视频直播综合网| 久久天天躁夜夜躁狠狠躁2022| 狠狠色香婷婷久久亚洲精品| 狠狠躁夜夜躁人人爽超碰91| 日韩亚洲欧美成人| 中文字幕免费国产精品| 精品动漫一区二区三区| 欧美午夜片欧美片在线观看| 亚洲iv一区二区三区| 国产精品99久久久久久久久久久久| 欧美老肥婆性猛交视频| 国产精品美女午夜av| 欧美午夜性色大片在线观看| 日韩欧美aⅴ综合网站发布| 日av在线播放中文不卡| 欧美日韩国产一区中文午夜| 久久久久中文字幕| 亚洲视频视频在线| 欧美视频不卡中文| 亚洲精品v欧美精品v日韩精品| 日韩美女在线观看一区| 久久久精品一区二区| 2023亚洲男人天堂| 青青草国产精品一区二区| 精品久久久久久久久久久久久| 91精品国产91| 亚洲国产精品人人爽夜夜爽| 精品国偷自产在线| 国产一区二区三区在线免费观看| 午夜精品www| 国产精品久久久久秋霞鲁丝| 欧美日韩爱爱视频| 国产精品美女久久| 国产精品久久国产精品99gif| 国产精品96久久久久久又黄又硬| 菠萝蜜影院一区二区免费| 国产亚洲精品激情久久| 亚洲天堂av图片| 日韩麻豆第一页| 日韩精品中文字幕有码专区| 91精品视频大全| 亚洲亚裔videos黑人hd| 国产福利视频一区二区| 亚洲欧洲自拍偷拍| 最近2019年手机中文字幕| 国产91精品网站| 91美女高潮出水| 欧美丰满片xxx777| 亚洲а∨天堂久久精品喷水| 一夜七次郎国产精品亚洲| 国产精品成人观看视频国产奇米| 精品亚洲男同gayvideo网站| 久久综合久中文字幕青草| 九九热精品视频国产| 久久久久久这里只有精品| 超碰91人人草人人干| 日韩精品久久久久| 91在线视频九色| 国产精品久久久久久久久久久久久| 91九色国产社区在线观看| 亚洲a级在线播放观看| 欧美丰满老妇厨房牲生活| 日韩精品在线免费观看视频| 97成人在线视频| 久久久久久久激情视频| 九九久久久久久久久激情| 91国产精品电影| 欧美成人久久久| 久久激情视频久久| 亚洲精品综合精品自拍| 亚洲日韩中文字幕在线播放| 亚洲最新视频在线| 国内外成人免费激情在线视频| 奇门遁甲1982国语版免费观看高清| 国产欧美一区二区三区视频| 成人免费视频a| 丝袜一区二区三区| 91精品久久久久久久久久入口| 亚洲免费一在线| 亚洲女同精品视频| 欧美性色xo影院| 亚洲第一区中文99精品| 国产成人综合一区二区三区| 国产欧美日韩中文字幕在线| 欧美激情中文网| 成人情趣片在线观看免费| 欧美专区在线视频| 国产一区二区三区中文| 欧美性做爰毛片| 亚洲japanese制服美女| xxx一区二区| 精品二区三区线观看| 亚洲аv电影天堂网| 日韩成人av一区| 久久久亚洲天堂| 国产精品白丝av嫩草影院| 日韩a**中文字幕| 91久久久久久久| 亚洲人成自拍网站| 欧美自拍视频在线| 国产日韩欧美在线看| 在线精品高清中文字幕| 欧美一级大片在线免费观看| 亚洲人成在线播放| 中文字幕v亚洲ⅴv天堂| 日韩网站免费观看高清| 久久久久久中文| 国产成人福利夜色影视| 热久久这里只有| 91美女福利视频高清| 久久亚洲欧美日韩精品专区| 91在线精品视频| 亚洲aaaaaa| 国产色婷婷国产综合在线理论片a| 91精品视频在线| 亚洲偷欧美偷国内偷| 亚洲精品国产免费| 奇米四色中文综合久久| 中文字幕日韩有码| 日韩亚洲一区二区| 亚洲国产女人aaa毛片在线| 最新国产精品亚洲| 日韩精品在线观看网站| 久久人人爽人人爽人人片亚洲| 欧美性生交大片免费| 欧美午夜精品久久久久久浪潮| 欧美大片va欧美在线播放| 亚洲欧美国产一区二区三区| 久久久亚洲国产天美传媒修理工| 成人天堂噜噜噜| 成人免费观看网址| 91精品国产色综合久久不卡98| 中文字幕欧美国内| 国产精品视频色| 亚洲综合日韩中文字幕v在线| 国模精品系列视频| 成人免费观看49www在线观看| 欧美日本国产在线| 亚洲成人在线视频播放| 国产成人aa精品一区在线播放| 国产999精品视频| 国产大片精品免费永久看nba| 久久久久久亚洲精品不卡| 久久久久九九九九| 国产精品天天狠天天看| 久久综合久久美利坚合众国| 欧美电影免费观看大全| 欧美美最猛性xxxxxx| 中文字幕久热精品视频在线| 91热精品视频| 久久人人爽人人爽人人片av高清| 2018日韩中文字幕| 色妞一区二区三区| 日韩欧美成人精品| 91av在线国产| 97超碰色婷婷| 国产91精品高潮白浆喷水| 爽爽爽爽爽爽爽成人免费观看|