为什么Javascript给我一个未捕获的类型为null的错误?

问题描述 投票:0回答:1

我的项目Javscript遇到了一些麻烦(我们不允许自己使用内联JS的文档,这是我尝试执行程序时唯一能找到的,这是

“ payment.js:182未捕获的TypeError:无法将属性'onsubmit'设置为null在初始化(payment.js:182)“。

现在,当我验证我的代码时,此错误不会显示在JSHint上,因此我不知道如何解决它,如果有人可以给我一些帮助,那将非常好。继承人代码:

"use strict";

//validate form inputs from payment.html
function validate() {

    var errMsg = "";
    var result = true;      //assumes no errors

    //assign elements to variables
    var mastercard_check = document.getElementById("mastercard").checked;
    var visa_check = document.getElementById("visa").checked;
    var express_check = document.getElementById("express").checked;
    var credit_name = document.getElementById("credit_name").value;
    var credit_number = document.getElementById("credit_number").value;
    var credit_expiry = document.getElementById("credit_expiry").value;
    var credit_vv = document.getElementById("credit_vv").value;

    //validations for form
    if (!(mastercard_check || visa_check || express_check)) {
        errMsg += "Please choose a card type\n";
        result = false;
    }

    if (credit_name.length > 40) {
        errMsg += "Please enter a name for your credit card between 1-40 characters\n";
        result = false;
    }
    else if (!credit_name.match(/^[a-zA-Z ]+$/)) {
        errMsg += "Credit card name can only contain alpha characters\n";
        result = false;
    }

    if (isNaN(credit_number)) {
        errMsg = errMsg + "Credit card number must contain digits only\n";
        result = false;
    }
    else if (credit_number.length < 15 || credit_number.length > 16){
        errMsg = errMsg + "Credit card number must contian either 15 or 16 digits\n";
        result = false;
    }
    else {
        var tempMsg = checkCardNumber(credit_number);
        if (tempMsg != "") {
            errMsg += tempMsg;
            result = false;
        }
    }

    if (!credit_expiry.match(/^\d{2}-\d{2}$/)) {
        errMsg = errMsg + "Credit Card expiry must follow the format mm-yy\n";
        result = false;
    }

    if (!credit_vv) {
        errMsg = errMsg + "Please enter a Credit Card Verification Value\n";
        result = false;
    }

    if (errMsg != "") {
        alert(errMsg);
    }

    return result;
}

//obtain the credit card type
function getCardType() {

    var cardType = "Unknown";
    var cardArray = document.getElementById("credit_type").getElementsByTagName("input");

    for(var i = 0; i < cardArray.length; i++) {
        if (cardArray[i].checked) {
            cardType = cardArray[i].value;
        }
    }
    return cardType;

}

//check hte card number matches the chosen card type
function checkCardNumber(credit_number) {
    var errMsg = "";
    var card = getCardType();
    switch(card) {
        case "visa":
            if (!(credit_number.length == 16)) {
                errMsg = "Visa number must contian 16 digits\n";
            }
            else if (!credit_number.match(/^(4).*$/)) {
                errMsg = "Visa number must start with a 4. \n";
            }
            break;
        case "mastercard":
            if (!(credit_number.length == 16)) {
                errMsg = "Mastercard number must contian 16 digits\n";
            }
            else if (!credit_number.match(/^(51|52|53|54|55).*$/)) {
                errMsg = "Mastercard number must start with digits 51 through 55. \n";
            }
            break;
        case "express":
            if (!(credit_number.length == 15)) {
                errMsg = "American Express number must contian 15 digits\n";
            }
            else if (!credit_number.match(/^(34|37).*$/)) {
                errMsg = "American Express number must start with 34 or 37. \n";
            }
            break;
    }
    return errMsg;
}

//calculate total cost using the meal size and quantity chosen
function calcCost(size, quantity){
    var cost = 0;
    if (size.search("three") != -1) cost = 100;
    if (size.search("four")!= -1) cost += 150;
    if (size.search("five")!= -1) cost += 200;
}
//get the stored values
function getInfo(){
    var cost = 0;
    if(sessionStorage.firstname != undefined){
        document.getElementById("confirm_name").textContent = sessionStorage.firstname + " " + sessionStorage.lastname;

    document.getElementById("confirm_address").textContent = sessionStorage.address + " " + sessionStorage.suburb + " " + sessionStorage.state + " " + sessionStorage.postcode;

    document.getElementById("confirm_details").textContent = sessionStorage.email + " " + sessionStorage.phone;

    document.getElementById("confirm_preferred").textContent = sessionStorage.preferred;

    document.getElementById("confirm_package").textContent = sessionStorage.package;

    document.getElementById("confirm_size").textContent = sessionStorage.size;

    document.getElementById("confirm_quantity").textContent = sessionStorage.quantity;
        cost = calcCost(sessionStorage.size, sessionStorage.quantity);




        document.getElementById("firstname").value = sessionStorage.firstname;
    document.getElementById("lastname").value = sessionStorage.lastname;
    document.getElementById("street").value = sessionStorage.street;
      document.getElementById("suburb").value = sessionStorage.suburb;
      document.getElementById("state").value = sessionStorage.state;
      document.getElementById("postcode").value = sessionStorage.postcode;
      document.getElementById("phone").value = sessionStorage.phone;
      document.getElementById("email").value = sessionStorage.email;
      document.getElementById("preferred").value = sessionStorage.preferred;
      document.getElementById("deal").value = sessionStorage.deal;
      document.getElementById("quality").value = sessionStorage.quality;
      document.getElementById("quantity").value = sessionStorage.quantity;
      document.getElementById("extrabags").value = sessionStorage.extrabags;
      document.getElementById("accomodation").value = sessionStorage.accomodation;
      document.getElementById("travel").value = sessionStorage.travel;
    document.getElementById("prohibiteditems").value = sessionStorage.prohibiteditems;
    document.getElementById("disabilityprecaution").value = sessionStorage.disabilityprecaution;
    }

}

function cancelBooking() {
window.location = "index.html";
}

function init() {

    getInfo();
    var payment = document.getElementById("payment");
    payment.onsubmit = validate;
    var cancel = document.getElementById("cancel");
    cancel.onclick = cancelBooking;
  }

window.onload = init;
javascript
1个回答
0
投票

[可能是var payment = document.getElementById("payment");处的ID错误,而JS找不到它,同样,如果您正在调用某个函数,则应像payment.onsubmit = validate();这样执行,以检查ID是否正确。

© www.soinside.com 2019 - 2024. All rights reserved.