使用onblur和onsubmit进行验证

时间:2018-04-02 08:54:51

标签: javascript forms input onsubmit onblur

我想知道当我同时使用onblur处理程序和onsubmit处理程序时如何验证表单。我试过这样做,直接进入提交页面而不显示错误信息。

因为我还有单选按钮和复选框,如果用户没有单击单选按钮并从验证中排除复选框,如何验证这些。

谢谢

function IsNotBlank(tf, tfHelp) {

    var value = tf.value;

    if (value == " ") {
        tf.className = "invalid ";
        tfHelp.innerHTML = "This field can 't be blank.";
        return false;
    } else {
        tf.className = "valid";
        tfHelp.innerHTML = "";
        return true;
    }
}

function CheckLetters(tf, tfHelp) {

    //check empty field from previous function.
    var NotEmpty = IsNotBlank(tf, tfHelp);

    if (NotEmpty == false) {
        return false;
    }

    //assign field value
    var value = tf.value;


    //check if there is numbers.
    var regex = new RegExp(/^[A-Za-z]{5,18}$/);

    var testResult = regex.test(value);
    if (testResult == false) {
        tf.className = "invalid";
        tfHelp.innerHTML = "Use letters only and lengths must be between 5 and 18 characters.";
        return false;
    } else {
        tf.className = "valid";
        tfHelp.innerHTML = "";
        return true;
    }
}

function CheckPhNumber(tf, tfHelp) {

    //check empty field
    var NotEmpty = IsNotBlank(tf, tfHelp);
    if (NotEmpty == false)
        return false;


    var value = tf.value;
    //validate phone number.
    var regex = /^\d{8,10}$/;
    var testResult = regex.test(value);
    //logic
    if (testResult == false) {
        tf.className = "invalid";
        tfHelp.innerHTML = "Please enter a valid phone number.";
        return false;
    } else {
        tf.ClassName = "valid";
        tfHelp.innerHTML = "";
        return true;
    }
}

function CheckEmail(tf, tfHelp) {

    //check empty field
    NotEmpty = IsNotBlank(tf, tfHelp);
    if (NotEmpty == false) {
        return false;
    }



    var value = tf.value;
    //validate email address

    var regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;

    var testResult = regex.test(value);

    //logic
    if (testResult == false) {
        tf.className = "invalid";
        tfHelp.innerHTML = "Please enter a valid email address.";
        return false;
    } else {
        tf.className = "valid";
        tfHelp.innerHTML = "";
        return true;
    }
}

function CheckPostCode(tf, tfHelp) {

    //check empty field
    var NotEmpty = IsNotBlank(tf, tfHelp);
    if (NotEmpty == false)
        return false;


    var value = tf.value;
    //validate postcode.
    var regex = /^\d{4}$/;
    var testResult = regex.test(value);
    //logic
    if (testResult == false) {
        tf.className = "invalid";
        tfHelp.innerHTML = "Please enter a 4 digit post code.";
        return false;
    } else {
        tf.ClassName = "valid";
        tfHelp.innerHTML = "";
        return false;
    }
}

function ValidateForm(form) {

    var formCheck = true;

    for (var i = 0; i < form.elements.length; i++) {
        var e = form.elements[i];
        //alert(form.elements[i]);
        if (e.onblur) {
            // alert(e.onblur());
            formCheck = e.onblur() && formCheck;
        }
    }
    return formCheck;
}

function ResetForm(form) {
    //select input elements and change color back to default
    var arrayInputs = document.getElementsByTagName("input");
    for (var i = 0; i < arrayInputs.length; i++) {
        arrayInputs[i].className = "valid";
    }

    //clear text on span elements
    var arraySpans = document.getElementsByTagName('span ');
    for (var i = 0; i < arraySpans.length; i++) {
        arraySpans[i].innerHTML = "";
    }
}
<form action="submit.html" onreset="ResetForm()" onsubmit="ValidateForm(this);">
    <div>
        <label for="fname" class="label">First Name:</label>
        <input class="valid" type="text" id="txtFname" onblur="return CheckLetters(this, txtFnameHelp);" />
        <span id="txtFnameHelp"></span>
    </div>

    <div class="one">
        <label for="lname" class="label">Last Name:</label>
        <input class="valid" name="lname" id="txtLname" type="text" onblur="return CheckLetters(this, txtLnameHelp);" />
        <span id="txtLnameHelp"></span>

    </div>
    <div class="one">
        <label class="label" for="phone">Phone Number:</label>
        <input class="one" id="txtPhone" type="text" onblur="CheckPhNumber(this, txtPhoneHelp);"><br>
        <span id="txtPhoneHelp"></span>

    </div>
    <div class="one">
        <label for="email" class="label">Email Address:</label>
        <input class="valid" id="txtEmail" type="text" onblur="CheckEmail(this, txtEmailHelp)">
        <span id="txtEmailHelp"></span><br>
    </div>
    <div class="one">
        <label class="label">Post Code:</label>
        <input id="txtPostcode" type="text" onblur="CheckPostCode(this, txtPostCodeHelp);"> <br>
        <span id="txtPostCodeHelp"></span>
    </div>
    <br>
    <div>
        <label>Prefered Contact Method</label><br>
    </div>
    <div class="one">
        </--<input type="radio" name="contact" value="email">Email
        </-- <input type="radio" name="contact" value="phone">Phone
    </div>
    <br>

    <div class="one">
        <label>Your Message:</label><br />
        <textarea id="txtMessage" rows="8" cols="40" onblur="IsNotBlank(this, txtMessageHelp)">Your Message</textarea>
        <span id="txtMessageHelp"></span>
        <br><br>
    </div>
    </--<input class="one" type="checkbox" name="newsletter" value="subscribe">I would like to subscribe to the newsletter <br>
    <div>
        <input class="one" type="submit" value="Send">
        <input class="one " type="Reset " value="Clear">
        <br><br>
    </div>

</form>

请注意,这些类型的JavaScript代码只能出于某种原因使用Microsoft Visual Studio进行调试,并且无法使用旧版文本编辑器。

1 个答案:

答案 0 :(得分:0)

您可以使用以下概念执行这两项操作,并使用window.addEventListener('DOMContentLoaded'function(e) {})检查验证

&#13;
&#13;
var error_user_name = false;

function checkpw(ele, e){
  var user_name = document.forms["joinform"]["user_name"].value;

  if (user_name == null || user_name == "") {
    text = "UserName : Required";
    document.getElementById("errormsg4").innerHTML = text;
    error_user_name = false;
  } else {
    document.getElementById("errormsg4").innerHTML = "";
    error_user_name = true;
  }
}

function submitall(ele, e) {
  checkpw();

  if(error_user_name == false) {
    e.preventDefault();
  } else {
    console.log('form submitted');
  }
}
window.addEventListener('DOMContentLoaded', function(e) { document.getElementById('user_name').addEventListener('blur', function(e) {
    checkpw(this, e);
    setTimeout(function() {
      if (document.activeElement.id == 'join') {
        document.activeElement.click();
      }
    }, 10);
  }, false);
  document.getElementById('joinform').addEventListener('submit', function(e) {
    submitall(this, e);
  }, false);
});
&#13;
<form id="joinform" method="post" name="joinform" action="#hello">
    <h2>Join</h2>

    <input type="text" name="user_name" id="user_name" placeholder="User_Name"/>
    <div class ="errormsg" id ="errormsg4"></div><br>
    <input type="submit" name="join" id="join" value="Submit"   ><br><br>

</form>
&#13;
&#13;
&#13;