0

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

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

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

还有我的 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;

  }

谁能看到我的问题是什么?

塔!

4

2 回答 2

3

像这样的两行:

    boolean firstTicket = true;

boolean不是 Javascript 中的 vlaid 关键字 -var改为使用。

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

于 2013-10-29T02:27:28.247 回答
0

您的脚本中有多个错误,我花了一段时间,但我想出了您的脚本。除了明显的语法错误之外,导致问题的关键是一行代码。

更新了你的小提琴

// 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.logjavascript 控制台来发现错误和变量值,以帮助您进行调试

编辑:
你的代码已经过时了,我为你最小化了它,所以它会真正起作用。JSFIDDLE

 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)">
于 2013-10-29T02:57:45.923 回答