【问题标题】:Form Validation?表单验证?
【发布时间】:2016-04-20 06:54:27
【问题描述】:

我只是想让这个检查表单验证。就像它不应该让表单提交,除非一切都被填写,那么它应该只在它有效的情况下才完成。我是新手,我不知道发生了什么,但默认情况下它只是在我的屏幕顶部显示一个蓝色框,然后无论是否填写表格都提交/接受。 HTML:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hands-on Project 6 - Order</title>
<link rel="stylesheet" href="styles.css">
<script src="script.js"></script>
</head>

<body>

<section>


    <article>
        <h2>Pizza Order Form</h2>
        <div id="errorMessage">
        </div>
        <form action="results.html" id="orderForm">
            <input type="hidden" name="hidden" id="hidden">
            <fieldset>


                <legend>Delivery Information</legend>

                <label for="nameinput">Name</label>
                <input type="text" id="nameinput" name="name">

                <label for="addrinput">Street Address</label>
                <input type="text" id="addrinput" name="address">

                <label for="cityinput">City</label>
                <input type="text" id="cityinput" name="city">

                <label for="emailinput">Email</label>
                <input type="email" id="emailinput" name="email">

                <label for="phoneinput">Phone</label>
                <input type="tel" id="phoneinput" name="phone">

            </fieldset>

            <fieldset>

                <legend>Order</legend>

                <p>
                    <span class="nonLabel">What type of crust:</span>

                    <br>

                    <input type="radio" name="crust" id="thin" value="1">
                    <label for="thin">Thin Crust</label>

            <input type="radio" name="crust" id="original" value="0">
                    <label for="original">Original Crust</label>

                    <input type="radio" name="crust" id="thick" value="3">
                    <label for="thick">Deep Dish</label>
                </p>

                <label for="size" class="nonLabel">What size pizza:</label>

                <select id="size" name="size">
                    <option value=""> &nbsp; </option>
                    <option value="small">Small</option>
                    <option value="medium">Medium</option>
                    <option value="large">Large</option>
                    <option value="XL">Extra Large</option>
                </select>

                <p>
                    <span class="nonLabel">What topping(s):</span>

                    <br>

    <input type="checkbox" id="pepperoni" name="toppings" value="Pepperoni">
                    <label for="pepperoni">Pepperoni</label>

        <input type="checkbox" id="sausage" name="toppings" value="Sausage">
                    <label for="sausage">Sausage</label>

            <input type="checkbox" id="bacon" name="toppings" value="Bacon">
                    <label for="bacon">Bacon</label>

                    <br>

<input type="checkbox" id="greenpep" name="toppings" value="Green Peppers">
                    <label for="greenpep">Green Peppers</label>

        <input type="checkbox" id="onion" name="toppings" value="Onions">
                    <label for="onion">Onions</label>

 <input type="checkbox" id="xcheese" name="toppings" value="Extra Cheese">
                    <label for="xcheese">Extra Cheese</label>
                </p>

                <p>
    <label for="instructions" id="instrlabel">Special Instructions:</label>
                </p>

<textarea id="instructions" name="instructions" rows="3" cols="60" 

 placeholder="Special Requests, Delivery Details"></textarea>

            </fieldset>

            <fieldset id="submitbutton">

                <input type="submit" id="submitBtn" value="Add to Cart">

            </fieldset>

        </form>

    </article>

    </section>
    <script>
    document.getElementById("submitBtn ").addEventListener("submit",   

 validateForm(evt));
    </script>
</body>
</html>

JavaScript:

// validate required fields
function validateForm(evt){
if(evt.preventDefault){
    evt.preventDefault();
}
else {
    evt.returnValue = false;
}
formValidity = true;
validateFormControls();
}
function validateFormControls(){
var inputElements = document.querySelectorAll("fieldset:first-of-type
input");

var errorDiv = document.getElementById("errorMessage");
var crustBoxes = document.getElementsByName("crust");
var fieldsetValidity = true;
var elementCount = inputElements.length;
var currentElement;

try {
    for(var i = 0; i < elementCount; i++){
        currentElement = inputElements[i];
        if(currentElement.value === ""){
            currentElement.style.border = "3px solid #0B907A";
            currentElement.style.backgroundColor = "#FFC58A";
            fieldsetValidity = false;
        }
        else {
            currentElement.style.border = "";
            currentElement.style.backgroundColor = "";
        }
    }
    currentElement.querySelectorAll("select")[0];
        if (currentElement.selectedIndex === 0){
            currentElement.style.border = "3px solid #0B907A";
            currentElement.style.backgroundColor = "#FFC58A";
            fieldsetValidity = false;
        }
        else{
            currentElement.style.border = "";
            currentElement.style.backgroundColor = "";
        }
    if (!crustBoxes[0].checked && !crustBoxes[1].checked &&
     !crustBoxes[2].checked){
        crustBoxes[0].style.outline = "3px solid #0B907A";
        crustBoxes[1].style.outline = "3px solid #0B907A";
        crustBoxes[2].style.outline = "3px solid #0B907A";
    }
    else {
        crustBoxes[0].style.outline = "";
        crustBoxes[1].style.outline = "";
        crustBoxes[2].style.outline = "";
    }
    if (fieldsetValidity === false){
        throw "Please complete all required fields.";
    }
    else {
        errorDiv.style.display = "none";
        errorDiv.innerHTM = "";
    }
catch(msg){
    errorDiv.style.display = "block";
    errorDiv.innerHTML = msg;
    formValidity = false;
     }
    }
}

function orderTotal(){
var itemTotal = 5;
var crusts = document.getElementsByName("crust");
var toppings = document.getElementsByName("goodnight");
var sizes = document.querySelectorAll("select")[0];

if (sizes.selectedIndex > 0) {
    itemTotal += ((sizes.selectedIndex * 1) * 2);
}
for (var i=0; i < toppings.length; i++){
    if (toppings[i].checked) {
        itemTotal += 1;
    }
}
for (var i=0; i < crusts.length; i++){
    if (crusts[i].checked) {
        itemTotal += (crusts[i].value * 1);
    }
}
alert ("Your order total is $" + itemTotal);
document.getElementById("hidden").value = itemTotal;
}

【问题讨论】:

    标签: javascript html forms validation


    【解决方案1】:

    id参数错误

    document.getElementById("submitButton ").addEventListener("submit", validateForm(evt));

    必须是

    document.getElementById("submitBtn").addEventListener("submit",validateForm(evt));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-21
      • 2012-07-29
      • 1970-01-01
      • 2012-01-06
      相关资源
      最近更新 更多