0

ある場所から別の場所へ、場合によっては複数の場所の間でルート情報を取得するアプリケーションがあります。私の関数では、チェックされた場所をループし、jQuery を使用してページへの道順を書き出しています。ループの最後の繰り返しで、「myRoute」変数は未定義になります。つまり、3 つの場所がある場合、3 番目に爆撃しますが、同じ 3 つを使用して 4 番目を追加すると、最初の 3 つは機能し、4 番目の爆弾は機能します。Firebug で動作を追跡したところ、myRoute 変数は適切に入力されますが、次の行に移動するとすぐに、突然未定義になります。のインスタンスを削除myRouteして置き換えましdirectionResult.routes[0].legs[i]たが、未定義のエラーが発生しました。何が起きてる?

function setInstructions(directionResult, idname, start) {
//clean tour list
$('#tours_list .tour').remove();
$('#routeTitle').show();
var checkboxArray = $(".selector.Favs" + idname).find("li");
var idx = 0;

var linkMap = $('#routeTitle').find('.link-map')[0];
linkMap.href = __mapLink+'saddr=' + start;
var firstStop = true;
//iterate selected properties
for (var i = 0; i < checkboxArray.length; i++) {
    var curChk = checkboxArray[i];
    if ($(curChk).hasClass('active')) {        
        //get steps
        var myRoute = directionResult.routes[0].legs[i]; //this is what becomes undfined
        var title = $('<div>').addClass('mileage').append($('<p>').append($('<strong>').html(myRoute.distance.text + "<br /> about " + myRoute.duration.text)));
        var ol = $('<ol>').addClass('directions');
        for (var j = 0; j < myRoute.steps.length; j++) {
            var step = myRoute.steps[j];
            var li = $('<li>').append($('<div>').addClass('direction').html(step.instructions));
            li.append($('<div>').addClass('distance').html(step.distance.text + " - " + step.duration.text));
            ol.append(li);
        }                      
        //add tour with directions
        $('#tours_list').append(temp);          
    }
}

}

4

1 に答える 1

1

問題は、配列directionResult.routes[0].legsがそれほど長くないcheckboxArray.lengthため、コードが の末尾を超えてアクセスしようとしてdirectionResult.routes[0].legs、 を取得することundefinedです。

i0から関係なく変化するため、アクティブなクラスアイテムのみをテストしていることは役に立ちませんcheckboxArray.length - 1


私はあなたが何をしようとしているのか正確にはわかりませんが、最初に .active を持つアイテムを反復するだけでこれを回避できるかもしれませんのでi、アクティブなアイテムの数を超えないようにしてください。これを変更することでそれを行うことができるかもしれません:

var checkboxArray = $(".selector.Favs" + idname).find("li");

これに:

var checkboxArray = $(".selector.Favs" + idname).find("li.active");

そして、ifアクティブなクラスのチェックを外します。これにより、インデックスiがアクティブなアイテムの数を超えないようになります。


directionResult.routes[0].legs[cntr]を使用する代わりに、処理したアクティブなアイテムのカウンターを保持し、そのカウンターを使用してインデックスを作成することもできますi

于 2013-11-09T22:06:29.647 に答える