如果else不在javascript中工作

If else is not working in javascript

本文关键字:工作 javascript 不在 else 如果      更新时间:2023-10-14

我在Javascript中有一个简单的if-else语句,用于计算票价。我做了一个if-else语句,这样,如果"StartStation"的值大于"EndStation",它将从"StartStation"值减去"EndStation"值。如果没有,它将从"EndStation"值减去"StartStation"值。问题是,当我选择From:station 8和To:station 10时,我得到的是-2,而不是+2。你能帮我排序吗?

HTML

<form>
            From:<select id="StartStation">
            <option selected="selected">---Please select start station</option>
            <option value="1">Station 1</option>
            <option value="2">Station 2</option>
            <option value="3">Station 3</option>
            <option value="4">Station 4</option>
            <option value="5">Station 5</option>
            <option value="6">Station 6</option>
            <option value="7">Station 7</option>
            <option value="8">Station 8</option>
            <option value="9">Station 9</option>
            <option value="10">Station 10</option>
            <option value="11">Station 11</option>
            <option value="12">Station 12</option>
            <option value="12">Station 13</option>
        </select>
            To:<select id="EndStation">
              <option value="1">Station 1</option>
            <option value="2">Station 2</option>
            <option value="3">Station 3</option>
            <option value="4">Station 4</option>
            <option value="5">Station 5</option>
            <option value="6">Station 6</option>
            <option value="7">Station 7</option>
            <option value="8">Station 8</option>
            <option value="9">Station 9</option>
            <option value="10">Station 10</option>
            <option value="11">Station 11</option>
            <option value="12">Station 12</option>
            <option value="12">Station 13</option>
       </select>    
            </form>
            <input type="button" value="Search" id="Search"/>   
            <div id="FareOutput"></div>

Javascript

$("#Search").on("click", function(){
        var $opt = $("#StartStation option:selected"); //From: Selected     
        var strno = $opt.val(); // Start value of fare
        var $opt2 = $("#EndStation option:selected"); //To: Selected
        var endno = $opt2.val(); //End value of fare
            // Fare Calculation -----------------------------------------------------
            if (strno > endno) { // If the selected station start from South e.g Taft-North
                var fare = (strno - endno);              
                }
            else {
                var fare = (endno - strno);                      
            }
                console.log(fare);         
                if (fare >=1 && fare <= 2){
                var fareresult = "$13"; }
                else if (fare >=3 && fare<=4){
                    var fareresult =  "$16";
                }
                else if (fare >=5 && fare<=7 ){
                    var fareresult =  "$20";
                }
                else if (fare >=8 && fare<=10 ){
                    var fareresult =  "$24";
                }
                else if (fare >=11 && fare<=12 ) {
                    var fareresult =  "$28";}
                    $("#FareOutput").html("Fare:" +" " + fareresult);
                });

if/else语句的一个更好的解决方案是取差的绝对值:

var fare = Math.abs(strno - endno);

strno > endno中,比较字符串"10""8",结果是false,即"10" < "8"

当计算"10" - "8"时,自动强制数字生效,结果为-2

@Gremash有一个更好的解决方案,我只想告诉你问题是什么:

进行比较时,如果(strno>endno),则值仍被视为字符串。字符串"8"大于字符串"10",这会引发比较。然后,您最终会进行减法运算,只有这样,值才会自动转换为数字

在进行比较之前,您需要确保这些值是数字

在比较&扣除您应该将中的值解析为数字(例如,要解析整数中的值,请使用js函数parseInt())。

计算前最好将数字转换为整数或浮点(取决于精度要求)。使用parseInt()(用于javascript)或.toNum()(用于jquery):

   var $opt = $("#StartStation option:selected"); //From: Selected     
    var strno = parseInt($opt.val()); // Start value of fare
    var $opt2 = $("#EndStation option:selected"); //To: Selected
    var endno = parseInt($opt2.val()); //End value of fare
        // Fare Calculation -----------------------------------------------------
        if (strno > endno) { // If the selected station start from South e.g Taft-North
            var fare = (strno - endno);              
            }
        else {
            var fare = (endno - strno);                      
        }

此外,这里有太多的变量通过以下方式优化代码以使用较小的内存空间:

$("#Search").on("click", function(){
    var $opt = $("#StartStation option:selected"); //From: Selected     
    var strno = $opt.val(); // Start value of fare
    var $opt2 = $("#EndStation option:selected"); //To: Selected
    var endno = $opt2.val(); //End value of fare
        // Fare Calculation -----------------------------------------------------
        var fare = 0;
        if (strno > endno) { // If the selected station start from South e.g Taft-North
             fare = (strno - endno);              
            }
        else {
             fare = (endno - strno);                      
        }
            console.log(fare);  
            var fareresult = "$0";       
            if (fare >=1 && fare <= 2){
             fareresult = "$13"; }
            else if (fare >=3 && fare<=4){
                 fareresult =  "$16";
            }
            else if (fare >=5 && fare<=7 ){
                 fareresult =  "$20";
            }
            else if (fare >=8 && fare<=10 ){
                 fareresult =  "$24";
            }
            else if (fare >=11 && fare<=12 ) {
                 fareresult =  "$28";}
                $("#FareOutput").html("Fare:" +" " + fareresult);
            });

希望这能有所帮助…:)

好的,试试这个:

   $("#Search").on("click", function () {
    var $opt = $("#StartStation option:selected"); //From: Selected     
    var strno =parseInt(  $opt.val()); //New Integer Start value of fare
    var $opt2 = $("#EndStation option:selected"); //To: Selected
    var endno = parseInt($opt2.val()); //New Integer End value of fare
    // Fare Calculation -----------------------------------------------------
    if (strno > endno) { // If the selected station start from South e.g Taft-North
        var fare = (strno - endno);
    }
    else {
        var fare = (endno - strno);
    }
    console.log(fare);
    if (fare >= 1 && fare <= 2) {
        var fareresult = "$13";
    }
    else if (fare >= 3 && fare <= 4) {
        var fareresult = "$16";
    }
    else if (fare >= 5 && fare <= 7) {
        var fareresult = "$20";
    }
    else if (fare >= 8 && fare <= 10) {
        var fareresult = "$24";
    }
    else if (fare >= 11 && fare <= 12) {
        var fareresult = "$28";
    }
    $("#FareOutput").html("Fare:" + " " + fareresult);
});

使用pasreInt()存储整数值将解决问题,因为默认情况下它将strno和endno作为字符串。