JQuery-UI的Datepicker(含Knockout的使用方法)

JQuery-UI是JQuery的擴充包,裡面包含很多顯示畫面的功能

其中最常用到的功能之一便是Datepicker

Datepicker就是非常常見的日曆功能

雖然是可以直接輸入日期

但是使用日曆可以協助使用者對應該日期是星期幾

更重要的是可以幫助開發者統一日期字串的規範

 

那就有人有問題啦

html裡面就有<input type="date" />可以使用了

幹嘛還要使用Datepicker

幾個禮拜前我重頭開發一個頁面時也有一樣的問題

但用了html的語法後發現

並不是每個瀏覽器都支援這樣的寫法

下方是Google Chrome

再來是IE(版本為11)

該語法在IE就無法使用(該死的IE  每次都有你的事)

所以後來就決定換成Datepicker

 

使用Datepicker時先載入相關套件

在NuGet中找到下方套件

安裝後會新增一些東西

首先是Content會新增css和images

因為JQuery-UI會顯示畫面,所以當然會有css

另外images裡面會放許多小圖示拼成的圖片,用來美化顯示結果

再來Script會出現jquery-ui-1.12.1和jquery-ui-1.12.1.min

min就是壓縮包,載入時間會比較快

以上就是準備工作  接下來可以開始進入程式碼部份了

 

<script src="~/Scripts/jquery-3.4.1.js"></script>
<script src="~/Scripts/jquery-ui-1.12.1.js"></script>
<link rel="stylesheet" href="~/Content/themes/base/jquery-ui.css" type="text/css" />

<p>
    <label>選擇日期:</label>
    <input type="text" id="datepicker" />
</p>

<script>
    $(function () {
        $("#datepicker").datepicker();
    });
</script>

載入資源包後

最重要的是將input的type屬性設定為text

以及使用.datepicker()方法

這樣就可以輕鬆使用日曆功能啦

題外話  如果不使用css也可以  但是會非常醜

 

再來,我們還可以將日曆設定顯示的語言

在網路上查一下datepicker language就可以找到各國的語言包

所以這裡加入繁體中文包

中文包連結:https://github.com/jquery/jquery-ui/blob/master/ui/i18n/datepicker-zh-TW.js

稍微看一下裡面的內容

}(function (datepicker) {

    datepicker.regional["zh-TW"] = {
        closeText: "關閉",
        prevText: "&#x3C;上個月",
        nextText: "下個月&#x3E;",
        currentText: "今天",
        monthNames: ["一月", "二月", "三月", "四月", "五月", "六月",
            "七月", "八月", "九月", "十月", "十一月", "十二月"],
        monthNamesShort: ["一月", "二月", "三月", "四月", "五月", "六月",
            "七月", "八月", "九月", "十月", "十一月", "十二月"],
        dayNames: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
        dayNamesShort: ["週日", "週一", "週二", "週三", "週四", "週五", "週六"],
        dayNamesMin: ["日", "一", "二", "三", "四", "五", "六"],
        weekHeader: "週",
        dateFormat: "yy/mm/dd",
        firstDay: 1,
        isRTL: false,
        showMonthAfterYear: true,
        yearSuffix: "年",
        changeYear: true
    };
    datepicker.setDefaults(datepicker.regional["zh-TW"]);

    return datepicker.regional["zh-TW"];

}));

裡面將日曆的各個元件改成中文

且裡面有一個dateFormat

他會設定顯示的日期字串格式為yy/mm/dd

所以載入後使用起來就會變成這樣

是不是變得很好看呢

 

既然說到了日期顯示字串格式  那就來設定一下吧

預設為mm/dd/yy

只要在datepicker()裡面加入日期格式就可以調整

<script>
    $(function () {
        $("#datepicker").datepicker({ dateFormat: "yy-mm-dd" });
    });
</script>

這樣就能方便規範格式,不用再對要傳送的資料進行處理了

 

以上是基礎的Datepicker使用範例

在實務上真的非常好用又美觀,非常推薦學起來

 

-------------------------------------------小小分隔線,以下是Knockout使用方法-------------------------------------------

 

最後來寫一下Knockout的使用方法

先加入資源

除了knockout-3.5.0之外還多了一個knockout-jqueryui.min

這就是用來對knockout和jqueryui進行處理的檔案

必須要有這個檔案,才能同時使用兩個套件

再來是程式碼

<script src="~/Scripts/jquery-3.4.1.js"></script>
<script src="~/Scripts/jquery-ui-1.12.1.js"></script>
<link rel="stylesheet" href="~/Content/themes/base/jquery-ui.css" type="text/css" />
<script src="~/Scripts/datepicker-zh-TW.js"></script>
<script src="~/Scripts/knockout-3.5.0.js"></script>
<script src="~/Scripts/knockout-jqueryui.min.js"></script>

<p>
    <label>選擇日期:</label>
    <input type="text" id="datepicker" data-bind="value:date,datepicker:{dateFormat: 'yymmdd'}" />
</p>
<p data-bind="text:date">

<script>
    $(function () {
        $("#datepicker").datepicker();
    });

    var MyViewModel = function () {
        var self = this;
        self.date = ko.observable();
    }

    var vM = new MyViewModel();
    ko.applyBindings(vM);
</script>

data-bind裡面就使用datepicker,大括號裡放顯示格式,也可以不加東西

就像data-bind="value:date,datepicker:{}"

那顯示結果就會是預設值

這裡我使用yymmdd

所以顯示結果為