Javascript 引用错误 - 找不到整个函数

Javascript Reference Error - Can not find entire function

本文关键字:函数 找不到 引用 错误 Javascript      更新时间:2023-09-26

我正在尝试编写一个简单的javascript函数,根据php打印的数据计算总数,它给了我一个Javascript参考错误,我已经用谷歌搜索过,但是这个错误太简单了,很常见,我找不到任何特定于我的问题的信息。

我已经清楚地做了功能,我无法理解我做错了什么。我知道这可能只是一个格式错误,但我看不到它。

JSFiddle在这里(它有php打印的静态示例):JSFiddle 示例

还有我的JavaScript:

function calculcateTotal(obj){
    var id = obj;
    var ticketCost = document.getElementById(obj).value;
    var i = 1;
    boolean firstTicket = true;
    if(document.getElementById('term1').selected == true){
        if(firstTicket == false){
            i = i + 1;
        }else if(firstTicket == true){
            firstTicket = false;
        }
    }else if(document.getElementById('term2').selected == true){
        if(firstTicket == false){
            i = i + 1;
        }else if(firstTicket == true){
            firstTicket = false;
        }
    }else if(document.getElementById('term3').selected == true){
        if(firstTicket == false){
            i = i + 1;
        }else if(firstTicket == true){
            firstTicket = false;
        }
    }else if(document.getElementById('term4').selected == true){
        if(firstTicket == false){
            i = i + 1;
        }else if(firstTicket == true){
            firstTicket = false;
        }
    }
    var runningTotal = parseFloat(ticketCost)*parseFloat(i);
    document.getElementById('total').value = runningTotal;
  }
  function changeTotal(){
    var ticketCost = document.getElementById('total').value;
    var i = 1;
    boolean firstTicket = true;
    if(document.getElementById('term1').selected == true){
        if(firstTicket == false){
            i = i + 1;
        }else if(firstTicket == true){
            firstTicket = false;
        }
    }else if(document.getElementById('term2').selected == true){
        if(firstTicket == false){
            i = i + 1;
        }else if(firstTicket == true){
            firstTicket = false;
        }
    }else if(document.getElementById('term3').selected == true){
        if(firstTicket == false){
            i = i + 1;
        }else if(firstTicket == true){
            firstTicket = false;
        }
    }else if(document.getElementById('term4').selected == true){
        if(firstTicket == false){
            i = i + 1;
        }else if(firstTicket == true){
            firstTicket = false;
        }
    }
    var runningTotal = parseFloat(ticketCost)*parseFloat(i);
    document.getElementById('total').value = runningTotal;
  }

任何人都可以看到我的问题是什么吗?

哒!

这样的两行:

    boolean firstTicket = true;

boolean 不是 Javascript 中的 vlay 关键字 - 请改用 var

如果您的 Javascript 中存在语法错误,则整个函数将被丢弃,因此会出现引用错误。

你的脚本中有多个错误,我花了一段时间,但我找到了你的脚本。 除了明显的语法错误之外,导致问题的一行代码是必不可少的。

更新了你的小提琴

// This is the line
// ticketCost = document.getElementById(obj).value;
// change to this
ticketCost = document.getElementById(obj.value).value;

变量 obj 是一个 html 元素,因此这将抛出错误,将其直接放入方法中,您要做的是获取它的 id,即所选项的值。

语法:

 // Syntax Error
 // boolean firstTicket = true;
 // correction
 var i = 1,     
     firstTicket = true;
// Syntax
// its checked not selected
// document.getElementById('term2').selected
document.getElementById('term2').checked
// Possible rewrite
 if (!firstTicket) i++;
 else firstTicket = false;
// from 
// no need for the extra if statement 
// bc false and true are opposites
if (firstTicket == false) {
  i = i + 1;
} else if (firstTicket == true) {
  firstTicket = false;
}
// Catch errors with first option being selected
if (obj.value === '') return false;
// reference error is due to the script not being in the head
// either put the script in the head or before the first call from the html elements
// use no wrap - in <head> for jsfiddle console

但您可以使用 console.log 通过 JavaScript 控制台发现错误和变量值,以帮助您进行调试

编辑:
你的代码太过分了,我为你最小化了它,所以它实际上会起作用。吉斯菲德尔

 var i = 0, // ticket count
     ticketCost = 0, // ticket cost
     total = document.getElementById('total');  // total
 function calculcateTotal (obj) {
  // change the ticket cost here    
    ticketCost = obj.value === '' ? 0 : document.getElementById(obj.value).value;       
    total.value = parseFloat(ticketCost) * i;       
 }
 function changeTotal (obj) {
    // change the ticket size here
    i = obj.checked ? (i + 1) : (i - 1);
    total.value = ticketCost * i;   
 }

.HTML

 // change html to the following
 // onchange="changeTotal(this)"
 <input type="checkbox" name="term1" id="term1" value="Summer" style="width:auto;margin-right:5px;" onchange="changeTotal(this)">