2018年6月7日 星期四

[jQuery] validate.unobtrusive 驗證(1) 基本用法

環境,在 vs2013 中建立 mvc 預設專案 (就是會有預設的頁面的那種),再將其中的幾個
js 檔取出來做測試

jquery.validate 加上 validate.unobtrusive 基本上就是達成以 unobtrusive 的方
式對頁面上的欄位進行驗證。

因為是以 unobtrusive 進行,所以如何去設定欄位如何去驗證這件事情,就由原本放在
onclick 或 blur 之類的事件中,去指定並取得欄位值的方式,轉而改用設定屬性指定
要是否要驗證及驗證方式。

在使用上,有分幾個方向 (本篇是第一種)

    第一種就是只對單一欄位,以內建預設的基本檢核,比方說欄位不可為空,Email 格
    式是否正確這種。

    第二種稍微複雜一點,需要再另行決定一些「資訊」比方說,檢查欄位的值是否在某個
    區間中,這個區間就是必須要自行決定的範圍,或是需要透過正則表達式檢查欄位。

    第三種是透過 Ajax 呼叫後端進行檢查

    第四種則是自定驗證。

基本的使用

<html>
        <head>
            <script src="Scripts\jquery-1.10.2.js"></script>
            <script src="Scripts\jquery.validate.js"></script>
            <script src="Scripts\jquery.validate.unobtrusive.js"></script>
        </head>
        <body>
            <form id="form1" method="get">

                <!-- 透過設定 data-val="true" 表示要進行驗證該 tag -->
                <!-- 透過設定 data-val-required="欄位不可為空" 表示要以該欄位不可為空的條件驗證該欄位,並當檢核失敗時顯示錯誤訊息「欄位不可為空!」 -->
                <input type="text" name="username" id="username" data-val="true" data-val-required="欄位不可為空!" />

                <!-- 下面的 tag 會顯示 name 屬性為 username 的 tag 進行驗證時所產生的錯誤訊息 -->
                <!-- data-valmsg-for 是對應到受驗證欄位的 name -->
                <!-- data-valmsg-replace 為必要 (有試過有些版本的驗證不用) -->
                <span data-valmsg-for="username" data-valmsg-replace="true"></span>

                <!-- 下面的 tag 會將頁面上驗證的錯誤訊息都集中在這 -->
                <div class="validation-summary-valid" data-valmsg-summary="true">
                    <ul>
                        <li style="display: none"></li>
                    </ul>
                </div>

                <input type="submit" id="send" value="Send" />            
            </form>
        </body>
    </html>
欄位不可為空
<!-- data-val-required="欄位不能为空!" -->
<input type="text" name="uid" id="uid" data-val="true" data-val-required="欄位不能为空!" />
<span data-valmsg-for="uid" data-valmsg-replace="true"></span>

檢查 Email 格式
<!-- data-val-email="Email不正確" -->
<input type="text" name="email" id="email" data-val="true" 
       data-val-required="Email 不能為空" data-val-email="Email不正確" />
<span data-valmsg-for="email" data-valmsg-replace="true"></span>

檢查 url 格式
<!-- data-val-url="網址錯誤" -->
<input type="text" name="url" id="url" data-val="true"
       data-val-url="網址錯誤">
<span data-valmsg-for="url" data-valmsg-replace="true"></span>

日期驗證有一套規則,我是覺的不太好用,或許用自定驗證來處理會比較恰當
<!-- data-val-date="日期錯誤" -->
<input type="text" name="ndate" id="ndate" data-val="true" value=""
       data-val-date="日期錯誤">                
<span data-valmsg-for="ndate" data-valmsg-replace="true"></span>

正整數
<!-- data-val-digits="必須輸入正整數" -->
<input type="text" name="digits" id="digits" data-val="true"
       data-val-digits="必須輸入正整數">
<span data-valmsg-for="digits" data-valmsg-replace="true"></span>

檢查所輸入的是否為數字,小數可以、負數可以、整數可以
<!-- data-val-number="必須為有效數字" -->
<input type="text" name="number" id="number" data-val="true"
       data-val-number="必須為有效數字">
<span data-valmsg-for="number" data-valmsg-replace="true"></span>

比對兩個欄位的內容是否一致
 <!-- data-val-equalto 指定欄位不一致時的錯誤訊息 -->
 <!-- data-val-equalto-other 要比對的另一個欄位的 name 屬性 -->
 <body>
    <form id="form1" method="get">
        <input type="password" name="pwd" id="pwd" data-val="true" />
        <input type="password" name="pwd2" id="pwd2" data-val="true" 
               data-val-equalto="兩次輸入的密碼不一致。" data-val-equalto-other="pwd"
        />
        <span data-valmsg-for="pwd2" data-valmsg-replace="true"></span>
        <input type="submit" id="send" value="Send" />            
    </form>
</body>

檢查欄位內容的長度
在 data-val-length-max 和 data-val-length-min 間輸入欄位長度的上下限,如果沒有這
個屬性,就表示長度沒有上/下限,data-val-length 則是表示這個欄位需要檢查長度,
並且設定當欄位長度錯誤時要回應什麼錯誤訊息。
<!-- data-val-length-max="10" data-val-length-min="6" -->
    <!-- data-val-length="欄位長度需要在 6 ~ 10 個字元間" -->
    <body>
        <form id="form1" method="get">
            <input type="text" name="columnLength" id="columnLength" data-val="true" 
                data-val-length-max="10" data-val-length-min="6"
                data-val-length="欄位長度需要在 6 ~ 10 個字元間" />
            <span data-valmsg-for="columnLength" data-valmsg-replace="true"></span>
            <input type="submit" id="send" value="Send" />            
        </form>
    </body>    

沒有留言:

張貼留言