2

私は自分のプログラム内でgradesArray見ることができる配列を持っていますが、(Chrome)コンソールに入力するか、または同様のものにアクセスしようとすると、 .console.log(gradesArray)gradesArraygradesArray.lengthReferenceError: gradesArray is not defined

配列をGradeオブジェクトで埋めるために使用するjQueryは次のとおりです。

$(document).on('click', '#savegrades', saveGrade);

function saveGrade() {                     // grabbing data from a form
    var studentClass = currentClass;
    var studentName = currentStudent;
    var dateStamp = $(this).parents('#gradingform').children('#date').val().replace(/-/g, "");
    var teamwork = parseInt( $(this).parents('#gradingform').children('#teamwork').val() );
    var participation = parseInt( $(this).parents('#gradingform').children('#participation').val() );
    var punctuality = parseInt( $(this).parents('#gradingform').children('#punctuality').val() );
    var professionalism = parseInt( $(this).parents('#gradingform').children('#professionalism').val() );
    var timemanagement = parseInt( $(this).parents('#gradingform').children('#timemanagement').val() );

    var newGrade = new Grade(studentClass, studentName, dateStamp, teamwork, participation,         // create new Grade object from form values
                                punctuality, professionalism, timemanagement);

    alert('class: ' + newGrade.studentClass + ', name: ' + newGrade.studentName + ', date: ' + newGrade.dateStamp + ', teamwork: ' + newGrade.teamwork + ', participation: ' + newGrade.participation + ', punctuality: ' + newGrade.punctuality + ', professionalism: ' + newGrade.professionalism + ', time management: ' + newGrade.timemanagement + ', total: ' + newGrade.total);

    gradesArray.push(newGrade);
    console.log(gradesArray);
}

このコードを実行すると、そのconsole.log(gradesArray)ビットは問題なく動作し、適切な Grade オブジェクトの配列が得られます。しかしgradesArray、コンソールに入力すると、変数が未定義であることを示す参照エラーが表示されます。また、プログラムの後半で を使用しようとしましif (typeof gradesArray != 'undefined')たが、関数が起動しません。

どうしたんだ?ブラウザーは、.js ファイルから要求した場合は配列をログに記録しますが、コンソールから直接要求した場合は記録しません。そして、オブジェクトで埋めた後でも、コンソールに表示されているにもかかわらず、まだ定義されていません。

前もって感謝します。

4

2 に答える 2

4

すべてのコードをコピーしたわけではありません。$(function () {})コードはgradesArray の var ステートメントを含む別の関数 ( ?) にラップされています。グローバル変数ではないため、コンソールから調べることはできません。最も簡単なのは、var ステートメントを $() の外に置くことです。

var gradesArray = []
$(function () { ... });
于 2013-07-30T23:29:27.530 に答える
0

コンソールにログインするまでにgradesArrayは、範囲外です。必要な場合は、グローバル スコープで宣言してみてください。

于 2013-07-30T23:28:46.680 に答える