0

PHP によって出力されたデータに基づいて合計を計算する単純な JavaScript 関数を作成しようとしていますが、Google で検索した Javascript 参照エラーが表示されますが、エラーは単純すぎて一般的なため、特定の情報を見つけることができません。私の問題。

関数を明確に作成しましたが、何が間違っているのか理解できません。おそらく単なるフォーマットエラーであることはわかっていますが、表示できません。

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

次のような 2 行:

    boolean firstTicket = true;

booleanは Javascript の有効なキーワードではありません -var代わりに使用してください。

JavaScript に構文エラーがある場合、関数全体が破棄されるため、参照エラーが発生します。

于 2013-10-29T02:27:28.247 に答える
0

スクリプトに複数のエラーがあります。しばらく時間がかかりましたが、スクリプトを理解しました。明らかな構文エラー以外に、問題を引き起こしているコードの 1 行が重要でした。

フィドルを更新しました

// 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 コンソールを使用してエラーや変数値を検出し、デバッグに役立てることができます。

EDIT:
あなたのコードはオーバーキルです。実際に動作するように最小化しました。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 に答える