简化IF / ELSE IF / ELSE模块

时间:2018-01-10 06:03:36

标签: javascript jquery html

我正在创建自己的验证码。我需要将每个输入框的if语句分开,以便同时显示错误。我注意到如果它在块上相同,则只显示第一个错误。有什么方法可以简化我的代码吗?



flag = 0;
//first if
if (first_name.length == 0) {
  flag = 0;
  $("label[for='firstname'").text('This field is required').css("display", "inline-block");
} else if (!first_name.match(name_regex)) {
  flag = 0;
  $("label[for='firstname'").text('Firstname must be composed of letters only').css("display", "inline-block");
} else if (first_name.length < 3) {
  flag = 0;
  $("label[for='firstname'").text('3 letters are required for lastname').css("display", "inline-block");
} else {
  flag = +1;
  $("label[for='firstname'").hide();
}

//second if
if (last_name.length == 0) {
  flag = 0;
  $("label[for='lastname'").text('This field is required').css("display", "inline-block");
} else if (!last_name.match(name_regex)) {
  flag = 0;
  $("label[for='lastname'").text('Lastname must be composed of letters only').css("display", "inline-block");
} else if (last_name.length < 2) {
  flag = 0;
  $("label[for='lastname'").text('2 letters are required for lastname').css("display", "inline-block");
} else {
  $("label[for='lastname'").hide();
  flag += 1;
}

//third if
if (validateEmail(email)) {
  if (data.result) {
    $("input#userEmail").css("border-color", "#ac2925");
    $("label[for='email'").text('Email exists').css("display", "inline-block");
  } else {
    $("input#userEmail").css("border-color", "#e3e3e3");
    $("label[for='email'").hide();
    flag += 1;
  }
} else {
  $("input#userEmail").css("border-color", "#ac2925");
  $("label[for='email'").text('Please input a valid email address').css("display", "inline-block");;
}

//fourth if on verification success
if (flag == 3) {
  alert("All validation succeded!");
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:0)

将其提取到一个函数中:

 function validate(inputName, labelName, minLetters, regex){
   const el = $(inputName);
   const label = $(labelName);
   if(!el || !!label) throw "validate: el not found";

  if(!el.val()){
    label.text("You need to fill in this!");
    return false;
  }

  if(regex && !el.val().test(regex)){
    label.text("The input contains invalid chars!");
    return false;
  }

 if(minLetters && el.val().length < minLetters){
   label.text("to short!");
   rerurn false;
 }

 return true;
 }

答案 1 :(得分:0)

我建议让验证例程更通用。请参阅以下解决方案(注意:未经测试):

function validate(funcName, minLength) {
  if (this[funcName].length == 0) {
    $("label[for='"+funcName+"'").text('This field is required').css("display", "inline-block");
  } else if (!this[funcName].match(name_regex)) {
    flag = 0;
    $("label[for='"+funcName+"'").text(funcName +' must be composed of letters only').css("display", "inline-block");
  } else if (this[funcName].length < minLength) {
    $("label[for='"+funcName+"'").text(minLength + ' letters are required for ' + funcName).css("display", "inline-block");
  } else {
    $("label[for='"+funcName+"'").hide();
    return true;
  }
  return false;
}

if (validate("firstname", 2) 
    && validate("lastname", 3) 
    && validateEmail(email)
) {
  // everything seems to be OK. 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 2 :(得分:-1)

我的方法是:

  1. 为每个验证设置单独的If块,以便检查所有验证。并在每次检查时构建/附加验证错误消息。
  2. 在函数中写入if else块。可以为要验证的每个字段调用该函数。并且该函数将为每个invokation返回验证错误消息,该消息可以附加到单个字符串中。
相关问题