0
function showConfirm(reArray) {

    var theHTML = '';
    var optionArray = ["Option 1", "Option 2", "Option 3", "Option 4", "Option 5", "Option 6", "Option 7"]; 
    var myButtons = {};
    var j = 1;

    for(var i = 0; i < reArray.length; i++){

                theHTML  +='<div style="text-align:center">' 
                         + '<span>'+j+'.</span>&nbsp;&nbsp;&nbsp;&nbsp;'
                         + '<span>'+reArray[i].RoadNo+'</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
                         + '<span>'+compass_image(reArray[i].Bearing)+'</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
                         + '</div><br/>'    

                j++;
        }

    for(i = 0; i < reArray.length; i++){

    ERROR HERE -----> var placeFunction = function(reArray[i]){

                                plotRoadInfo(reArray[i]);
                                $(this).dialog("close");
                            };

                            myButtons[optionArray[i]] = placeFunction;
    }

    $( "#dialog-modal" ).dialog({
      height: 300,
      modal: true,
      buttons: myButtons

    });

    $('#multipleRE').append(theHTML);
}

したがって、この関数はオブジェクト配列 (reArray) を渡され、jquery ダイアログ ボックス用のボタンの配列 (myButtons) を作成します。各ボタンで使用される関数に reArray[i] を渡そうとしています。これは plotRoadInfo(reArray[i]); を実行することです。

「予期しないトークン [」が表示され続けますが、一生原因がわかりません。

4

3 に答える 3

3

JavaScript ではパラメーターの型を指定しません。単に名前を使用し、それを関数内の配列として使用します。

var placeFunction = function(reArray){
    plotRoadInfo(reArray[i]);
    $(this).dialog("close");
};

内部関数がアクセスできる配列として参照しているので、指定する必要さえないと思います。

var placeFunction = function() {
    plotRoadInfo(reArray[i]);
    $(this).dialog("close");
};

Pointy が指摘しているように、これはi変数が共有されるという問題に遭遇するため、各関数は を参照します。reArray[reArray.length]これは、ループがi === reArray.length. iこれを回避する一般的な方法は、関数を返すパラメーターとして受け入れる関数を呼び出すことです。

var placeFunction = (function (item) {
    return function() {
        plotRoadInfo(item);
        $(this).dialog("close");
    };
}(reArray[i]));

これがどのように機能するかをより深く理解するには、クロージャーについて読んでください。これが起こっている別の例を次に示します。

于 2013-04-15T01:34:42.527 に答える
2

あなたの構文は正しくありません。

あなたがやりたいことは次のことだと思います:

var placeFunction = 
    (function(arrayitem){
        return function(){
                   plotRoadInfo(arrayitem);
                   $(this).dialog("close");
               };

     })(reArray[i]);

myButtons[optionArray[i]] = placeFunction;
于 2013-04-15T01:38:14.497 に答える
1

パラメータにインデックスがあるのはなぜですか?

function(reArray[i])

もしかして

function(reArray)
于 2013-04-15T01:33:48.903 に答える