我有一个表单(调查)的验证脚本。它遍历所有答案,并检查它是否是单选按钮、复选框、输入或文本区域问题。在此基础上,它分别检查一个选中值的输入(单选和复选框),或者一个除“”之外的值(input/textarea)(这不算多,但可以从它开始)。requiredMessage()在字段为空时设置警告,或在用户更正字段时删除警告。
我正在寻找一种方法来优化这段代码,因为它看起来非常重复,但我不太确定如何开始。尽管这些块有一些共同点,但它们似乎不适合一个通用检查。欢迎任何帮助!
注意:我不希望有一个经过全面审查的版本,我只需要在哪里寻找改进的方向,或者如何使用jQuery将这些验证检查链接在一起。
// validate the form
function validate(event){
var sendform = true;
$(".questionnaire-question-answer").each(function(){
// radiobutton case
if($(this).find("input:radio").length){
if($(this).find("input:radio:checked").length == 0){
requiredMessage(this, "invalid");
sendform = false;
} else {
requiredMessage(this, "valid");
}
}
// checkboxes case
else if($(this).find("input:checkbox").length){
if($(this).find("input:checkbox:checked").length == 0){
requiredMessage(this, "invalid");
sendform = false;
} else {
requiredMessage(this, "valid");
}
}
// single freetext case
else if($(this).find("input:text").length == 1) {
if($(this).find("input:text").val() == ""){
requiredMessage(this, "invalid");
sendform = false;
} else {
requiredMessage(this, "valid");
}
}
// multiple freetext case
else if($(this).find("input:text").length > 1) {
var content = false;
$(this).find("input:text").each(function(){
if($(this).val() != ""){
content = true;
requiredMessage(this, "valid");
}
});
if(content == false){
requiredMessage(this, "invalid");
sendform = false;
}
}
// textarea case
else if($(this).find("textarea").length){
if($(this).find("textarea").val() == ""){
requiredMessage(this, "invalid");
sendform = false;
} else {
requiredMessage(this, "valid");
}
}
});
// check whether the form has errors
if(sendform == true){
return true;
} else {
event.preventDefault();
}
}