-2

我试图在第一个语句的第二个语句中重用相同的变量,ifif收到警告说我的变量是undefined当我对其发出警报时。

我怎样才能让这个变量在第二条if语句中保留它的值?我只是复制部分代码让你看看我在说什么。我试图foundRangeStart在第二个 if 语句中使用 for ESNEnd,它以前在第一个if语句中使用过 for ESNStart

为什么在第二个语句中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在 ESNEnd 的第二个 if 语句中使用,该语句以前在 ESNStart 的第一个 if 语句中使用

不,它没有在第一个 if 语句中使用。如果第二个被执行,第一个没有被执行——这两个条件$(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 回答