0

以前にこのコードで少し助けがありましたが、別の問題に遭遇しました。各関数内の変数を変更して、そのスコープ外で使用するにはどうすればよいですか?
私のコードの簡単な説明は次のとおりです。各 Web ページについて、要素の内容を取得し、それらを配列に挿入します。この後、配列を操作してメッセージを作成し、ブラウザにアラートを送信します。

HTML

<div id="insert"></div>

Javascript

$(document).ready(function() {
    userid = 17320;
    courseid = 4745;

    allLessonsArray = script(userid, courseid);

    function script(userid, courseid) {
        var lessonInTopicSectionArray = new Array();
        lessonInTopicSectionArray['Floods, external'] = 376;
        var allLessonsArray = new Array();

        $.each(lessonInTopicSectionArray, function(name, lesson) {
            lastAttempt = 0;
            url = '---------/learn/mod/lesson/report.php?id=' + lesson + '&action=reportdetail&userid=' + userid + '&try=' + lastAttempt;
            var lessonArray = new Array();

            $.get(url, function(data) {
                var page = $(data);                
                $('tr.r1.lastrow td.cell.c0').html(page).each(function(index, content) {
                    score = parseInt(content.substr(content.length - 1));
                    lessonArray[index] = score;
                });

                allLessonsArray[name] = lessonArray;
            });

        });
        return allLessonsArray;
    }

    var message = "";

    $.each(allLessonsArray, function(name, lessonArray) {
        if (!message) {
            message = "<li>Lesson <b>" + name + "</b> scores are:</li>";
        }
        else {
            message = message + "<li>Lesson <b>" + name + "</b> scores are:</li>";
        }

        probability = lessonArray[0];
        humanImpact = lessonArray[1];
        infrastructureImpact = lessonArray[2];
        communityImpact = lessonArray[3];
        training = lessonArray[4];
        preparedness = lessonArray[5];
        message = message + "<ul><li>Probability score: " + probability + "</li><li>Human Impact score: " + humanImpact + "</li><li>Public Health Infrastructure Impact score: " + infrastructureImpact + "</li><li>Community Impact score: " + communityImpact + "</li><li>Training score: " + training + "</li><li>Preparedness score: " + preparedness + "</li></ul>";
        risk = (probability / 3) * ((humanImpact + infrastructureImpact + communityImpact + training + preparedness) / 15);
        message = message + "<p>Risk of <b>" + name + "<b> is" + risk + ".</p>";

    });

    $('#insert').html(message);

});​
4

2 に答える 2

0

スコープは正しいようです。

おそらくあなたの問題は、インデックスとしてaを持つ$.each()要素を反復しないという事実に関連しています。ArrayString

ここで次のことを試してください。ポップアップが表示されるのは次のとおりです0 -> 1

var list = new Array();
list['Floods, external'] = 376;
list[0] = 1;

$.each(list, function(index, item) {
    alert(index + " -> " + item);
});​

jQueryの$.each() ドキュメントページから:

説明:オブジェクトと配列の両方をシームレスに反復するために使用できる汎用イテレーター関数。長さプロパティを持つ配列および配列のようなオブジェクト(関数のargumentsオブジェクトなど)は、0からlength-1までの数値インデックスによって繰り返されます。他のオブジェクトは、名前付きのプロパティを介して繰り返されます。

次の方法で同等のことを実行できます。

var list = new Array();
list[0] = {name : 'Floods, external', value : 376};

$.each(list, function(index, item) {
    alert(item.name + " -> " + item.value);
});​
于 2012-08-10T21:26:55.307 に答える
0

その変数をスコープ外で定義する必要があります。

var myvar = [];
$.each(
// stuff happens to myvar
)
于 2012-08-10T20:42:07.053 に答える