Vanadium 是一款輕量、規則豐富、採用聲明式 HTML 屬性配置的 jQuery 表單驗證插件。本文詳細講解引入方式、驗證鉤子語法、多規則組合、錯誤提示自定義、未用規則剔除及核心參數配置,助你快速集成生產級表單驗證。
<script src="jquery.js"></script>
<script src="vanadium.js"></script>
在表單控件上添加 class 作為驗證鉤子,格式::rule_name 或 :rule_name;param。
<form id="regForm">
<!-- 必填 -->
<input id="username" class=":required" />
<!-- 必填 + 長度 4~8 -->
<input id="password" class=":required :min_length;4 :max_length;8" />
<!-- 郵箱格式 -->
<input id="email" class=":required :email" />
<!-- 數字 + 範圍 -->
<input id="age" class=":number :min;18 :max;100" />
<!-- 自定義正則 -->
<input id="phone" class=":required :regexp;/^1\d{10}$/" />
<button type="submit">提交</button>
</form>
$('#regForm').vanadium(); // 默認綁定 submit 事件
| 規則鉤子 | 參數 | 說明 |
|---|---|---|
:required | — | 非空 |
:min_length | 數字 | 最小長度 |
:max_length | 數字 | 最大長度 |
:min / :max | 數字 | 數值範圍 |
:number / :digits / :integer | — | 數字/整數/浮點數 |
:email | — | 郵箱格式 |
:url | — | URL 格式 |
:date | — | 日期格式 (YYYY-MM-DD) |
:alpha / :alphanum | — | 字母/字母數字 |
:regexp | 正則字符串 | 自定義正則,如 :regexp;/^custom$/ |
:ajax | URL | 遠程驗證,返回 {valid:true} 或 {valid:false, message:'...'} |
:confirm | 選擇器 | 與另一字段值一致,如 :confirm;#password |
Vanadium 默認生成錯誤提示元素,可通過選項覆蓋樣式類名:
$('#regForm').vanadium({
valid_class: 'valid-field', // 驗證通過樣式
invalid_class: 'invalid-field', // 驗證失敗樣式
message_value_class: 'msg-value', // 提示中動態值樣式
advice_class: 'error-message' // 錯誤提示文本樣式
});
修改默認提示文案(需編輯 vanadium.js 內部 messages 對象或擴展):
// 擴展/覆蓋默認消息
$.vanadium.messages = {
required: '此字段不能為空',
email: '請輸入有效郵箱',
min_length: '最少需要 {0} 個字符',
// ... 其他鍵
};
Vanadium 核心文件包含所有規則實現,生產部署前建議:
vanadium.jsrequired、email、number 等)可將文件體積從 ~15KB 減至 ~5KB,加載更快。
| 參數 | 類型 | 默認值 | 說明 |
|---|---|---|---|
valid_class | String | 'valid' | 驗證通過時添加到字段的 class |
invalid_class | String | 'invalid' | 驗證失敗時添加的 class |
advice_class | String | 'advice' | 錯誤提示元素的 class |
message_value_class | String | 'value' | 提示中動態參數值的 class |
instant | Boolean | false | true 時綁定 blur/keyup 即時驗證 |
onValid | Function | $.noop | 單字段驗證通過回調 |
onInvalid | Function | $.noop | 單字段驗證失敗回調 |
onSuccess | Function | $.noop | 整個表單驗證通過回調 |
onError | Function | $.noop | 整個表單驗證失敗回調 |
const validator = $('#regForm').vanadium({
onSuccess: function() {
// 手動提交 AJAX
$.post('/api/register', $('#regForm').serialize())
.done(res => { if (res.ok) location.href = '/welcome'; })
.fail(() => alert('提交失敗'));
return false; // 阻止默認提交
}
});
// 手動觸發驗證
if (validator.vanadium('validate')) { ... }
// 重置表單驗證狀態
validator.vanadium('reset');
$(newField).vanadium() 重新綁定,或使用事件委託模式(插件較舊版本可能不支持)。:hidden,需顯式調用驗證或設置 ignore: ''(若支持)。.vanadium(),不要在同一頁面多次綁定同一 form。| 方案 | 特點 | 適用場景 |
|---|---|---|
| Vanadium | 聲明式、零 JS 配置、規則豐富、體積小 | 舊項目維護、快速原型、簡單表單 |
| jQuery Validation | 官方維護、規則豐富、API 完善、支持遠程、本地化 | 企業級項目、複雜驗證邏輯 |
| Parsley.js | HTML5 data 屬性驅動、無需寫 JS、ESM 支持、活躍維護 | 現代項目、聲明式偏好 |
| HTML5 原生驗證 | 零依賴、瀏覽器原生、required/pattern/type | 簡單表單、現代瀏覽器、輕量優先 |
| VeeValidate / Zod + Vue/React | 框架集成、TypeScript 支持、Schema 驅動 | 現代框架項目 |
Vanadium 雖早期停止更新,但其「Class 作為規則聲明」的設計思想極具啟發性。理解其機制後,遷移到現代方案將輕而易舉。