我想創建一個自定義的jQuery表單驗證腳本來幫助我學習jQuery,並且它是最佳實踐。但是,當我開始的那一刻,我發現自己比解決方案有更多的問題。我知道有jQuery驗證插件和其他一些第三方插件,但這是我想從頭開始創建的。自定義jQuery表單驗證 - 什麼是最佳方式?
我的第一次嘗試產生如下所示。它工作的很好,但看起來像很多代碼來驗證基本上相同類型的輸入提交一直到形式。
$(".validation").submit(function(){
if($(".name").val() === ""){
$(".name").addClass("error");
$(".errorMessage").html("<p>Error: Please enter a valid name</p>").slideDown();
return false;
}if($(".address1").val() === ""){
$(".address1").addClass("error");
$(".errorMessage").html("<p>Error: Please enter a valid address</p>").slideDown();
return false;
}if($(".city").val() === ""){
$(".city").addClass("error");
$(".errorMessage").html("<p>Error: Please enter a valid city</p>").slideDown();
return false;
}if($(".state").val() === "0"){
$(".state").addClass("error");
$(".errorMessage").html("<p>Error: Please enter a valid state</p>").slideDown();
return false;
}if($(".zipCode").val() === ""){
$(".zipCode").addClass("error");
$(".errorMessage").html("<p>Error: Please enter a valid zip code</p>").slideDown();
return false;
}if($(".phone").val() === ""){
$(".phone").addClass("error");
$(".errorMessage").html("<p>Error: Please enter a valid phone</p>").slideDown();
return false;
}if($(".email").val() === "" || ! /^[a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/.test($(".email").val())){
$(".email").addClass("error");
$(".errorMessage").html("<p>Error: Please enter a valid email</p>").slideDown();
return false;
}
});
我的第二次嘗試產生如下所示。這減少了所有的if語句,但是事件冒泡,它正在向後驗證表單。它也一次只在$(".errorMessage").html("There was an error" + " " + name);
中添加一條錯誤消息。是否有可能同時顯示每個空表單字段的錯誤消息,而不是每次顯示一個?我有一個CodePen demo這個工作。
$("form").on("submit", function(e){
$("input").each(function(){
var name = $(this).attr("name");
if($(this).val() == ""){
$(".errorMessage").html("There was an error" + " " + name);
e.preventDefault();
}else{
return true;
}
});
});
任何有關技術或最佳實踐的建議都會很棒。
感謝,
JB
http://docs.jquery.com/Plugins/Validation – 2013-02-08 14:49:54
只是出於好奇,是什麼點錯誤中額外的「」?只需在第一部分追加空格... – 2013-02-08 14:56:39
Rick,感謝您的評論。我喜歡使用append的想法,我知道在這個例子中它是無關緊要的,但出於性能目的,不會像增加理論上的性能一樣添加它。 – jcoder 2013-02-08 15:45:55