jQuery大神幫你做後台 - 驗證篇
有了儲存, 就一定要有驗證
過去大家應該都是使用ASP.NET的驗證控制項
坦白說, 超強大的啊, 簡單好用, 而且前後台都可以驗證
根本就三個願望一次滿足了
但我就是不喜歡, 算個人處女座潔癖吧 = =
看到編輯時候的亂七八糟HTML我就快要抓狂
實際輸出的HTML碼更是看到快要瘋掉, 怎麼可以這麼混亂
但之前使用AutoPostBack機制發佈資料,
驗證控制項可以結合的很漂亮
就摸了摸鼻子繼續用
但是現在都用AJAX傳資料, 也很少在用.NET的控制項
驗證控制項無用武之地
於是就把腦筋動到了jQuery頭上
要是我畫表單寫css的時候
<input type='text' id='txtName' />
偷偷給他加上一個屬性
<input type='text' id='txtName' validate='required' />
然後我在存資料的時候加上一個
var result = true;
$('input[validate*=required').each(function() {
var $this = $(this);
var val = $this.val();
if (!val || val.length == 0) {
result = false;
return false;
}
});
if(result)
save();
else
alert('你需要輸入全部的資料!');
這樣不就可以讓jQuery自動幫我驗證了嗎
而且HTML也很簡潔, 一眼就可以看出來哪個input為必填 (雖然不符合W3C規定啦 不要鞭我)
而且每一頁都可以套用同一支程式
只有驗證成功才可以儲存
寫到這邊就想到, 反正都用jQuery了, 那不如我在把沒通過的input標出顏色好了
反正我有用jQuery UI Theme, 裡面有一個class 'ui-state-highlight' 正好符合我的需求
因此就把程式改成
var highLight = 'ui-state-highlight';
var result = true;
$('input[validate*=required').removeClass(highLight)
.each(function() {
var $this = $(this);
var val = $this.val();
if (!val || val.length == 0) {
$this.addClass(highLight);
result = false;
return false;
}
});
if(result)
save();
else
alert('你需要輸入全部的資料!');
效果還ok吧, 就把他標上黃色, 當然顏色可以自訂
後來又想到要是有訊息不是更好, 可是我要怎麼知道這個input要叫什麼
於是把input改成
<input type='text' id='txtName' title='廠商名稱' validate='required' />
var highLight = 'ui-state-highlight';
var result = true;
var message = '';
$('input[validate*=required').removeClass(highLight)
.each(function() {
var $this = $(this);
var val = $this.val();
if (!val || val.length == 0) {
$this.addClass(highLight);
var title = $this.attr('title');
if (title && title.length > 0)
message += title + ' is Required!';
result = false;
}
});
if(result)
save();
else
alert(message ?? '你需要輸入全部的資料');
這樣有訊息有標明應該更清楚了
當然之後加上對select, radio, checkbox的支援
還有加上max min, regular, isNumber等驗證 就是另外的故事了 = =
( 再加上我因為太懶每個欄位打title, 就用jQuery抓每個input前面的span內容直接寫成input的title, 反正吃的是Client端的記憶體 啦啦啦)
而且最重要的事情還是
這一支程式可以用在每一頁上, 不需要額外重寫 ( 當然有例外狀況啦, 這就發揮程式設計師的智慧去擴充功能吧)
到這邊我們可以整理出來
我們一個後台的維護介面
從放資料, 驗證, 組成資料通通都可以用jQuery設計一個架構去套用到所有的頁面
而ASP.NET就透過PageMethod丟資料過來, 以及做對應的處理
我們其實可以把每一頁要寫的程式碼發揮智慧降到最低
除了增加維護測試的便利性外, 開發速度可以快非常多
當然.NET最新的又推出了更多更方便的新技術讓我們更容易的設計後台
甚至可以什麼程式都不用寫
我也還在努力鑽研中
而這邊只是提供一個方向, 希望高手指點了
本來想要把整個寫完的jQuery UI貼上來, 後來想想太冗長了
而且還沒有經過完整的測試
就不丟上來獻醜了
下一篇希望有時間介紹flexigrid這個威力強大的table UI,
讓我們的後台可以用簡單的方式呈現清楚明確好用的資料
再麻煩各位先進指點了
(忘了註明, 這樣只有前台的驗證, 重要的資料在Server端記得要在驗證一次
要記得: 資料在進資料庫之前都是不可信賴的, 純Client驗證要繞過的方法太多了)
--
本文可能有理解錯誤 或不盡不實的地方
請路過的前輩不要客氣 用力打醒
這會是我們成長的主要養分