首页 > 解决方案 > Javascript 和 HTML:单击提交时不显示验证警报消息

问题描述

我在编码 html 和 js 时遇到问题。提交时没有出现警报,我完全遵循模板。任何人都能够找到问题所在?我确定我的脚本文件位于同一目录中,并且在我使用 document.write("") 进行测试后链接了该文件。而且我希望网页做的是提醒(gErrorMsg)。

这是html部分

<!DOCTYPE html>
<html lang="en">
<head>
    
    <link rel="stylesheet" type="text/css" href="./styles/style1.css">
    <script src="script.js"></script>

</head>

<body>
    <header>
        <img id="images" src = "Logo.png" alt="Photo of Logo"/>
    </header>
    
    <nav>
        <ul>
            <li><a href = "https://www.swinburne.edu.my/contact">Contact Us</a> |</li>  
            <li><a href = "https://www.swinburne.edu.my/hr">Jobs at Swinburne</a> |</li>
            <li><a href = "https://www.swinburne.edu.au/copyright-disclaimer/">Copyright and disclaimer</a> |</li>
            <li><a href = "https://www.swinburne.edu.my/privacy/privacy-collection-notice">Privacy</a> |</li>
            <li><a href = "https://www.swinburne.edu.my/accessibility-information">Accesibility</a> |</li>
            <li><a href = "https://www.swinburne.edu.my/feedback">Feedback</a> |</li>
            <li><a href = "./register.html">Register</a></li>
        </ul>
    </nav>

    <form id="regForm" method="post" action="" validate="novalidate">
        <fieldset>
            <legend>Personal Details:</legend>
                <label for="fname">Name:</label><input type="text" id="fname" name="fname" placeholder="Your name" required="required"/>*<br/>
                <label for="fmail">Email:</label><input type="text" id="fmail" name="fmail" placeholder="Your email" required="required"/>*<br/>
                <label for="fdob">Date of birth:</label><input type="text" id="fdob" name="fdob" placeholder="dd/mm/yy"/>
        </fieldset>

        <fieldset>
            <legend>Your unit</legend>
                <input type="radio" value="cos10011" name="radio" id="COS10011" />COS10011
                <input type="radio" value="cos60004" name="radio" id="COS60004" />COS60004
                <input type="radio" value="cos60007" name="radio" id="COS60007" />COS60007<br/>

                <label for="tutor">Your Tutor:</label>

                <select name="tutor" id="tutor">
                    <option value="none">-------</option>
                    <option value="t1">Tutor 1</option>
                    <option value="t2">Tutor 2</option>
                    <option value="t3">Tutor 3</option>
                    <option value="other">Other</option>
                </select>
        </fieldset>

        <fieldset id="issue">
            <legend >Issue</legend>
                <input type="checkbox" name="html" value="html"/>HTML
                <input type="checkbox" name="css" value="css"/>CSS
                <input type="checkbox" name="javascript" value="jss"/>JavaScript
                <input type="checkbox" name="php" value="php"/>PHP
                <input type="checkbox" name="mysql" value="sql"/>MySQL
                <br/><br/>

                <label for="comments">Description of Issue</label><br/>
                <textarea name="comments" id="comments" rows="5" cols="20" placeholder="Enter comments header"></textarea>
        </fieldset>

        <fieldset>
            <legend>Preferred Date/Time</legend>
            <label for="date">Date:</label>
            <input type="date" id="date" name="date"/><br/>
            <label for="time">Time:</label>
            <input type="time" id="time" name="time"/>
        </fieldset>

        <input type= "submit" value="Register"/>
        <input type= "reset" value="Reset"/>
    </form>
</body>
</html>

这是 Javascript 部分

var gErrorMsg = "";

function init() {
    var regForm = document.getElementById("regForm");
    regForm.onsubmit = validateForm;
}

window.onload = init;

function validateForm(){
    "use strict"; //directive to ensure variables are declared
    var isAllOK = false;
    gErrorMsg = ""; //reset error message
    var nameOK = chkName();
    var emailOK = chkEmail();
    var tutorOK = chkTutor();
    var dobOK = isDobOK();
    var unitOK = isUnitSelected();
    var issueOK = isIssueSelected();
    if (nameOK && emailOK && issueOK && dobOK && tutorOK && unitOK){
        isAllOK = true;
    }
    else{
        alert(gErrorMsg); //display concatenated error messages
        gErrorMsg = ""; //reset error msg
        isAllOK = false;
    }
    return isAllOK;
}

// check name valid format
// demo: nested single branch if statements
// demo: string property and regular expression pattern
function chkName () {
    var name = document.getElementById("fname").value;
    var pattern = /^[a-zA-Z ]+$/ //check only alpha characters or space
    var nameOk = true;
    if (name==""){
        gErrorMsg = gErrorMsg + "Your name cannot be blank\n"
        nameOk = false; //if condition or clause complex more readable if branches on separate lines
    }
    else{
        if (!pattern.test(name)){
            gErrorMsg = gErrorMsg + "Your name must only contain alpha characters\n"
            nameOk = false;
        }
    }
    return nameOk;
}

//check the pattern of email(regular expression)
// demo: two branch if statement with then
function chkEmail () {
    var email = document.getElementById("fmail").value;
    var result = false;
    var pattern = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-za-zA-Z0-9.-]{1,4}$/;
    if (pattern.test(email)){
        result = true;
    }
    else{ //braces a good idea even if not strictly needed for single statement
        result = false;
        gErrorMsg = gErrorMsg + "Enter a valid email address\n"
    }
    return result;
}

function chkTutor(){
    var selected = false;
    var tutor = document.getElementById("tutor").value;
    if (tutor!="none"){
        selected = true;
    }
    else{
        selected = false;
        gErrorMsg = gErrorMsg + "You must select your tutor\n"
    }
    return selected;
}


//demo String and Date methods
//demo array index
//check date format is (sort of) ok
// check cat is born and less than 20 yo.
function isDobOK(){
    var validDOB = true; //set to false if not ok
    var now = new Date(); //current date-time
    var dob = document.getElementById("fdob").value;
    var dateMsg = "";
    //assume format dd/mm/yyyy
    var dmy = dob.split("/"); //split date into array with elements dd mm yyy
    var allNumbers = true;
    for (var i = 0; i < dmy.length; i++){
        if(isNaN(dmy[i])){
            dateMsg = dateMsg + "You must enter only numbers into the date" + "\n";
            validDOB = false;
        }
    }
    if ((dmy[0] <1) || (dmy[0] > 31)){ //day
        dateMsg = dateMsg + "Day must be between 1 and 31" + "\n";
        validDOB = false;
    }
    if ((dmy[1] <1) || (dmy[1] > 12)){ //month
        dateMsg = dateMsg + "Month must be between 1 and 12" + "\n";
        validDOB = false;
    }
    if ((dmy[2] < now.getFullYear() - 60)) { //dmy[2] = year
        dateMsg = dateMsg + "Invalid DOB, you are too old to register" + "\n";
        validDOB = false;
    }
    if (dmy[2] > now.getFullYear()){
        dateMsg = dateMsg + "Invalid DOB, you are not born yet." + "\n";
        validDOB = false;
    }
    if (!validDOB){
        gErrorMsg = gErrorMsg + dateMsg;
        }
    return validDOB;
}

//check male or female has been selected
function isUnitSelected(){
    var selected = false;
    var is11 = document.getElementById("COS10011").checked;
    var is04 = document.getElementById("COS60004").checked;
    var is07 = document.getElementById("COS60007").checked;
    if (is11 || is04 || is07)
        selected = true; //we haven't used {}. BE CAREFUL about adding extra lines
    else{
        selected = false;
        gErrorMsg = gErrorMsg + "Please select your unit\n"
    }
    return selected;
}

//demo counted for loop
/* Use parallel arrays of label and input to check at least one check box is selected
then construct an error message from the labels on the web page
Note: more checkboxes can be added to the html without affecting the JS code
*/
function isIssueSelected(){
    var selected = false;
    var issue = document.getElementById("issue").getElementsByTagName("input");
    var labels = document.getElementById("issue").getElementsByTagName("label");
    var label = "";
    var issueList = "";
    for (var i=0; i < issue.length; i++){
        selected = selected || issue[i].checked;
        label = labels[i].firstChild.textContent;
        issueList = issueList + "- " + label + "\n";
    }
    if (!selected){
        gErrorMsg = gErrorMsg + "You must select any of the following issue:\n" + unitList;
    }
    return selected;
}


标签: javascripthtmlformsvalidation

解决方案


这是您的问题:您正在使用一些未定义的变量。仔细检查您的 HTML 或变量是否已初始化。

function isIssueSelected(){
    var selected = false;
    var issue = document.getElementById("issue").getElementsByTagName("input");
    var labels = document.getElementById("issue").getElementsByTagName("label");
    var label = "";
    var issueList = "";
    for (var i=0; i < issue.length; i++){
        selected = selected || issue[i].checked;
        label = labels[i].firstChild.textContent; // ERROR:  labels[i] is undefined
        issueList = issueList + "- " + label + "\n";
    }
    if (!selected){
        gErrorMsg = gErrorMsg + "You must select any of the following issue:\n" + unitList; // ERROR: unitList is undefined
    }
    return selected;
}

工作演示

var gErrorMsg = "";

function init() {
    var regForm = document.getElementById("regForm");
    regForm.onsubmit = validateForm;
}

window.onload = init;

function validateForm(e){
    e.preventDefault(); // Necessary for some reason...

    "use strict"; //directive to ensure variables are declared
    var isAllOK = false;
    gErrorMsg = ""; //reset error message
    var nameOK = chkName();
    var emailOK = chkEmail();
    var tutorOK = chkTutor();
    var dobOK = isDobOK();
    var unitOK = isUnitSelected();
    var issueOK = isIssueSelected();
    if (nameOK && emailOK && issueOK && dobOK && tutorOK && unitOK){
        isAllOK = true;
    }
    else{
        alert(gErrorMsg); //display concatenated error messages
        gErrorMsg = ""; //reset error msg
        isAllOK = false;
    }
    return isAllOK;
}

// check name valid format
// demo: nested single branch if statements
// demo: string property and regular expression pattern
function chkName () {
    var name = document.getElementById("fname").value;
    var pattern = /^[a-zA-Z ]+$/ //check only alpha characters or space
    var nameOk = true;
    if (name==""){
        gErrorMsg = gErrorMsg + "Your name cannot be blank\n"
        nameOk = false; //if condition or clause complex more readable if branches on separate lines
    }
    else{
        if (!pattern.test(name)){
            gErrorMsg = gErrorMsg + "Your name must only contain alpha characters\n"
            nameOk = false;
        }
    }
    return nameOk;
}

//check the pattern of email(regular expression)
// demo: two branch if statement with then
function chkEmail () {
    var email = document.getElementById("fmail").value;
    var result = false;
    var pattern = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-za-zA-Z0-9.-]{1,4}$/;
    if (pattern.test(email)){
        result = true;
    }
    else{ //braces a good idea even if not strictly needed for single statement
        result = false;
        gErrorMsg = gErrorMsg + "Enter a valid email address\n"
    }
    return result;
}

function chkTutor(){
    var selected = false;
    var tutor = document.getElementById("tutor").value;
    if (tutor!="none"){
        selected = true;
    }
    else{
        selected = false;
        gErrorMsg = gErrorMsg + "You must select your tutor\n"
    }
    return selected;
}


//demo String and Date methods
//demo array index
//check date format is (sort of) ok
// check cat is born and less than 20 yo.
function isDobOK(){
    var validDOB = true; //set to false if not ok
    var now = new Date(); //current date-time
    var dob = document.getElementById("fdob").value;
    var dateMsg = "";
    //assume format dd/mm/yyyy
    var dmy = dob.split("/"); //split date into array with elements dd mm yyy
    var allNumbers = true;
    for (var i = 0; i < dmy.length; i++){
        if(isNaN(dmy[i])){
            dateMsg = dateMsg + "You must enter only numbers into the date" + "\n";
            validDOB = false;
        }
    }
    if ((dmy[0] <1) || (dmy[0] > 31)){ //day
        dateMsg = dateMsg + "Day must be between 1 and 31" + "\n";
        validDOB = false;
    }
    if ((dmy[1] <1) || (dmy[1] > 12)){ //month
        dateMsg = dateMsg + "Month must be between 1 and 12" + "\n";
        validDOB = false;
    }
    if ((dmy[2] < now.getFullYear() - 60)) { //dmy[2] = year
        dateMsg = dateMsg + "Invalid DOB, you are too old to register" + "\n";
        validDOB = false;
    }
    if (dmy[2] > now.getFullYear()){
        dateMsg = dateMsg + "Invalid DOB, you are not born yet." + "\n";
        validDOB = false;
    }
    if (!validDOB){
        gErrorMsg = gErrorMsg + dateMsg;
        }
    return validDOB;
}

//check male or female has been selected
function isUnitSelected(){
    var selected = false;
    var is11 = document.getElementById("COS10011").checked;
    var is04 = document.getElementById("COS60004").checked;
    var is07 = document.getElementById("COS60007").checked;
    if (is11 || is04 || is07)
        selected = true; //we haven't used {}. BE CAREFUL about adding extra lines
    else{
        selected = false;
        gErrorMsg = gErrorMsg + "Please select your unit\n"
    }
    return selected;
}

//demo counted for loop
/* Use parallel arrays of label and input to check at least one check box is selected
then construct an error message from the labels on the web page
Note: more checkboxes can be added to the html without affecting the JS code
*/
function isIssueSelected(){
    var selected = false;
    var issue = document.getElementById("issue").getElementsByTagName("input");
    var labels = document.getElementById("issue").getElementsByTagName("label");
    var label = "";
    var issueList = "";
    for (var i=0; i < issue.length; i++){
        selected = selected || issue[i].checked;
        label = ""; //labels[i].firstChild.textContent; // ERROR:  labels[i] is undefined
        issueList = issueList + "- " + label + "\n";
    }
    if (!selected){
        gErrorMsg = gErrorMsg + "You must select any of the following issue:\n"; // + unitList; // ERROR: unitList is undefined
    }
    return selected;
}
<!DOCTYPE html>
<html lang="en">
<head>
    
    <link rel="stylesheet" type="text/css" href="./styles/style1.css">
    <script src="script.js"></script>

</head>

<body>
    <header>
        <img id="images" src = "Logo.png" alt="Photo of Logo"/>
    </header>
    
    <nav>
        <ul>
            <li><a href = "https://www.swinburne.edu.my/contact">Contact Us</a> |</li>  
            <li><a href = "https://www.swinburne.edu.my/hr">Jobs at Swinburne</a> |</li>
            <li><a href = "https://www.swinburne.edu.au/copyright-disclaimer/">Copyright and disclaimer</a> |</li>
            <li><a href = "https://www.swinburne.edu.my/privacy/privacy-collection-notice">Privacy</a> |</li>
            <li><a href = "https://www.swinburne.edu.my/accessibility-information">Accesibility</a> |</li>
            <li><a href = "https://www.swinburne.edu.my/feedback">Feedback</a> |</li>
            <li><a href = "./register.html">Register</a></li>
        </ul>
    </nav>

    <form id="regForm" method="post" action="">
        <fieldset>
            <legend>Personal Details:</legend>
                <label for="fname">Name:</label><input type="text" id="fname" name="fname" placeholder="Your name" required="required"/>*<br/>
                <label for="fmail">Email:</label><input type="text" id="fmail" name="fmail" placeholder="Your email" required="required"/>*<br/>
                <label for="fdob">Date of birth:</label><input type="text" id="fdob" name="fdob" placeholder="dd/mm/yy"/>
        </fieldset>

        <fieldset>
            <legend>Your unit</legend>
                <input type="radio" value="cos10011" name="radio" id="COS10011" />COS10011
                <input type="radio" value="cos60004" name="radio" id="COS60004" />COS60004
                <input type="radio" value="cos60007" name="radio" id="COS60007" />COS60007<br/>

                <label for="tutor">Your Tutor:</label>

                <select name="tutor" id="tutor">
                    <option value="none">-------</option>
                    <option value="t1">Tutor 1</option>
                    <option value="t2">Tutor 2</option>
                    <option value="t3">Tutor 3</option>
                    <option value="other">Other</option>
                </select>
        </fieldset>

        <fieldset id="issue">
            <legend >Issue</legend>
                <input type="checkbox" name="html" value="html"/>HTML
                <input type="checkbox" name="css" value="css"/>CSS
                <input type="checkbox" name="javascript" value="jss"/>JavaScript
                <input type="checkbox" name="php" value="php"/>PHP
                <input type="checkbox" name="mysql" value="sql"/>MySQL
                <br/><br/>

                <label for="comments">Description of Issue</label><br/>
                <textarea name="comments" id="comments" rows="5" cols="20" placeholder="Enter comments header"></textarea>
        </fieldset>

        <fieldset>
            <legend>Preferred Date/Time</legend>
            <label for="date">Date:</label>
            <input type="date" id="date" name="date"/><br/>
            <label for="time">Time:</label>
            <input type="time" id="time" name="time"/>
        </fieldset>

        <input type= "submit" value="Register"/>
        <input type= "reset" value="Reset"/>
    </form>
</body>
</html>


推荐阅读