TWzipcode.js

快速建立臺灣三碼郵遞區號表單元件的 JS Library

版本 3.0
Playground

Codepen

See the Pen TWzipcode playground by essoduke (@essoduke) on CodePen.

安裝

引用
<script src="/path/twzipcode.js"></script>
npm
npm install twzipcode.js

使用

HTML

<-- /* 基本 */-->
<div class="twzipcode"></div>

<--/* 進階自訂 */-->
<div class="twzipcode">
    <select data-role="county" ></select>
    <select data-role="district"></select>
    <input type="hidden" data-role="zipcode" />
</div>

Javascript

/** 預設選擇器 .twzipcode */
const twzipcode = new TWzipcode();

/** 預設選擇器 & 參數 */
const twzipcode = new TWzipcode({...});

/** 自訂選擇器 & 參數 */
const twzipcode = new TWzipcode('.hello-world', {...});

/** Element 或 NodeList */
const twzipcode = new TWzipcode(document.querySelectorAll('.hello-world'));

方法

.nth()

若有多組清單,可使用 .nth() 選取

@param  {String|number} id
@return  {TWzipcode}
語法
let foo = twzipcode.nth(string|number id);

// 取得第 1 組清單
let foo = twzipcode.nth(0);

// 取消指定
let foo = twzipcode.nth();

.get()

取值

@param  {String|Object} value
@return  {Object|Array|String}
語法
let result = twzipcode.get();
// output:
{
    "zipcode": "100",
    "county": "臺北市",
    "district": "大安區"
}

// 取特定欄位
let result = twzipcode.get("zipcode");
// output: 106

// 取多個欄位
let result = twzipcode.get(["county", "zipcode"]);
// output:
{
    "county": "臺北市",
    "zipcode": "大安區"
}

.set()

設定值

@param  {Object|String} [key]
@return  {TWzipcode}
語法
// 設郵遞區號
// 直接給定郵遞區號
twzipcode.set("106");

// 或給定縣市字串
twzipcode.set({
    "county": "臺北市",
    "district": "大安區"
});

.serialize()

輸入 serialize 字串

@return  {String}
語法
let result = twzipcode.serialize();
// Output: county=COUNTY&district=DISTRICT&=zipcode=ZIPCODE...

.isIslands()

判斷所選值是否為離島 (參見 options.islands_key)

@param    {Array}  [islands_name]
@return  {Boolean}
語法
let is_island = twzipcode.isIslands();
// output true|false

// 或帶入自訂離島
let is_island = twzipcode.isIslands(["桃園市", "大安區"]);

.parseAddress()

解析台灣地址

參數

{
    county: {
        name: "(string) 表單名稱:預設 `county`",
        css: "(string) 樣式名稱",
        label: "(string) 清單預設文字",
        value: "(string) 預設選取值",
        hidden: "(Boolean|String|Array) 要隱藏的縣市,預設 false"
        onChange: "(Function) onChange event"
    },
    district: {
        name: "(string) 表單名稱:預設 `district`",
        css: "(string) 樣式名稱",
        label: "(string) 清單預設文字",
        value: "(string) 預設選取值",
        hidden: "(Boolean|String|Array) 要隱藏的鄉鎮市區,預設 false"
        onChange: "(Function) onChange event"
    },
    zipcode: {
        name: "(string) 表單名稱:預設 `zipcode`",
        css: "(string) 樣式名稱",
        value: "(string) 預設選取值",
        onKeyup: "(Function) onKeyup event"
    },
    combine: "(bool) 是否將由地區號併入鄉鎮市區清單,預設 true",
    islands_key: "(array) 離島名稱,預設 ['綠島鄉', '蘭嶼鄉', '金門縣', '連江縣', '澎湖縣', '琉球鄉']",
    islands_hidden: "(bool) 是否顯示離島,預設 true"
}