-2

if最初のステートメントから2 番目のステートメントで同じ変数を再利用しようとしていますが、変数にアラートをスローするとif、その変数であるという警告が表示されます。undefined

ifこの変数を 2 番目のステートメントで値を保持するにはどうすればよいでしょうか? 私が話していることを理解できるように、コードの一部だけをコピーしています。の最初のステートメントで以前に使用されていfoundRangeStartた の 2 番目の if ステートメントで使用しようとしています。ESNEndifESNStart

2 番目のステートメントで がfoundRangeStart設定されているのはなぜですか?undefinedif

if ($(this).attr("id") == "ESNStart") {
    var esnStart = [];
    esnStart[0] = esn_to_num(enteredData);
    var item;
    var rangesFoundStart = [];

    rangesFoundStart[0] = -1; // Set defaut value as -1 for the corresponding entry in the "rangesFound" array
    for (var x in ranges) { // Inner loop over items in ranges object
        item = esnStart[0];
        if (item >= ranges[x].min && item <= ranges[x].max) {
            rangesFoundStart[0] = x;
        }
    }

    if (rangesFoundStart[0] >= 0) {
        foundRangeStart = rangesFoundStart[0];
    }

    if (foundRangeStart && foundRangeStart >= 0) {
        $("#STxModel").val(ranges[foundRangeStart].StxName);
        $("#TxSpacing").val(ranges[foundRangeStart].rtumodel);
    }
}
if ($(this).attr("id") == "ESNEnd") {
    var esnEnd = [];
    esnEnd[0] = esn_to_num(enteredData);
    var item;
    var foundRangeEnd;
    var rangesFound = [];
    rangesFound[0] = -1; // Set defaut value as -1 for the corresponding entry in the rangesFound array
    for (var x in ranges) { // Inner loop over items in ranges object
        item = esnEnd[0];
        if (item >= ranges[x].min && item <= ranges[x].max) {
            if (rangesFound[x] == foundRangeStart) {
                rangesFound[0] = x;
                var foundone = rangesFound[0] = x;
                alert(foundone + foundRangeStart);
            }
        } else {
            alert(alert_total);
        }

    }
}
4

3 に答える 3

1

その制御パスには、foundRangeStart設定されていないためです。

ここの最初のESNStartブロックでのみ設定されているようです。

if ( rangesFoundStart[0] >= 0 ) {  
    foundRangeStart = rangesFoundStart[0];
}

ただし、このステートメントが等しくない場合、その行は実行されませんtrue

if ($(this).attr("id") == "ESNStart") { ... }
于 2013-02-04T21:12:17.877 に答える
1

foundRangeStart以前は ESNStart の最初の if ステートメントで使用されていた、ESNEnd の 2 番目の if ステートメントで使用しようとしています。

いいえ、最初の if ステートメントでは使用されませんでした。2 番目の条件が実行された場合、最初の条件は実行されませんでした - 2 つの条件$(this).attr("id") == "ESNStart"$(this).attr("id") == "ESNEnd"は相互に排他的です。

于 2013-02-04T21:17:29.440 に答える
0
        if ( rangesFoundStart[0] >= 0 ) {  
            foundRangeStart = rangesFoundStart[0];
         }

条件内で変数を宣言しています。rangeFoundStart[0] が 0 未満の場合はどうなりますか? その場合、変数は宣言されませんでした。

これは、条件の外で foundRangeStart を宣言することで修正できます。

       var rangesFoundStart = [];
       var foundRangeStart;

            rangesFoundStart[0] = -1; // Set defaut value as -1 for the corresponding entry in the "rangesFound" array
            for (var x in ranges) { // Inner loop over items in ranges object
                item = esnStart[0];
                if (item >= ranges[x].min && item <= ranges[x].max) {
                     rangesFoundStart[0] = x;
                }
            }

        if ( rangesFoundStart[0] >= 0 ) {  
            foundRangeStart = rangesFoundStart[0];
         }
于 2013-02-04T21:14:54.593 に答える