0

ESNListテキストフィールドでは、複数の値をコンマで区切って入力する必要がありますが、それらは同じ範囲内である必要があります。たとえば、以下のループの条件で、ESNListに986329〜999999の数値を入力した場合、コンマの後のESNListフィールドの2番目の入力は、最初の入力と同じ範囲内にある必要があります。それ以外の場合は、両方のESNが同じ範囲内にある必要があるというアラートをスローします。チェックを実行するためにループを実行しましたが、それは機能していません..誰かがエラーがどこにあるかを私に示すことができますか..フィドルはトンを助けるでしょう、

<html>
    <head>
    <script type="text/javascript" src="jquery/jquery-1.8.3.js"></script>
    <script type="text/javascript">

    $(function () {


    $(":text").css("border", "2px solid red");
      $(":text").keyup(function(){
        var enteredData = $(this).val()
        console.log(enteredData);
        if (enteredData == "") {
          $(this).css("border", "2px solid red");
        } else {
          $(this).css("border", "inherit");
        }
        if ($(this).attr("id") == "ESNList"){
       esnList = enteredData.split(',');
           }

           for(var i = 0; i < esnList.length; i++) {
            if  ( parseInt(esnList[i]) >= 986329 && parseInt(esnList[i]) <= 999999) {
                $("#ddl_StxName").val("stx2");
                $("#ddl_rtumodel").val("globalstar");
                }
            else if ( parseInt(esnList[i]) >= 660000 && parseInt(esnList[i]) <= 699999) {
                $("#ddl_StxName").val("mmt");
                $("#ddl_rtumodel").val("globalstar");
                 }
            else if ( parseInt(esnList[i]) >= 200000 && parseInt(esnList[i]) <= 299999) {
                $("#ddl_StxName").val("stm3");
                $("#ddl_rtumodel").val("stmcomtech");
                 }
            else if ( parseInt(esnList[i]) >= 1202114 && parseInt(esnList[i]) <= 1299999) {
                $("#ddl_StxName").val("smartone");
                $("#ddl_rtumodel").val("globalstar");
          }

          else { alert("ESNs should be within the same range"); }

        }


      });
      });
    </script> </head>
    <body>
    <form id="provision">
        ESNList:    <input  type="text" id="ESNList" name="ESNList" size="30" /> <br />
        ESN Start:<input type="text" id="ESNStart" name="ESNStart" size="10" /> <br />
        ESN End: <input type="text" id="ESNStart" name="ESNStart" size="10" /> <br />
        UnitName:<input type="text" id="STxName" name="STxName" size="30"  />  <br />  
         Unit Model:   <select name="STxName" id="ddl_StxName">
        <option value="stx2">STX2</option>
        <option value="stm3" selected>STM3</option>
        <option value="acutec">Acutec</option>
         <option value="trackpack">Trackpack</option>
        <option value="mmt">MMT</option>
        <option value="smartone">Smartone</option>
        <option value="smartoneb" >SmartOneB</option>
        </select> <br />
        RTU Model Type:
         <select name="rtumodel" id ="ddl_rtumodel">
        <option value="globalstar">GlobalStar</option>
        <option value="both">Both</option>
        <option value="comtech">Comtech</option>
        <option value="stmcomtech">STMComtech</option>
        </select> <br />
        <input type="submit" value ="submit"  />
        </form>
    </body>
    </html> 
4

1 に答える 1

0

どこから始めればいいですか?

1 つには、keyup は連続する各 keyup イベントの後にトリガーされます。つまり、ユーザーが入力を完了する前に、何度も何度も比較を行い、多くの「否定」を取得することになります。最初の値。

痛みを和らげるために、このフィドルであなたのコードから始めました:http://jsfiddle.net/mori57/68s68/

(出力として機能するテキストエリアを下部に配置したことに注意してください。これにより、範囲チェックがどのように発生しているかを正確に確認できます。キーアップと組み合わせて、かなり厄介なループを作成していたため、アラートもコメントアウトしました.)

問題は、各比較が現在の値のコンテキスト内にのみ存在することです...比較するようなものを保存していないため、「開始範囲」がどうあるべきかわかりません。ループ内の次の値。現在見ているアイテムが指定された範囲内にあるかどうかをテストするだけであり、最後に検索したアイテムと同じ範囲に入るわけではありません。

これを行うには、最初の比較を外部変数に格納し、最初の後のすべての値をその外部変数に保存されている範囲と比較します。開始するための例については、以下のコードを参照してください。また、コンテキストで参照してください: http://jsfiddle.net/mori57/68s68/2/

$(function () {
    var out = $("#output");
    var debug = function(txtIn){
        out.val(out.val() + "\n" + txtIn);
    };
    // store your ranges here, in an array
    var ranges = [
        [986329,999999],
        [660000,699999],
        [200000,299999],
        [1202114,1299999]
    ];

    // store the activeRange that is set by the first item in the comparison loop
    var activeRange = -1;

    // use this to test the a value against a given range array
    var withinRange = function(comparitor, range) {
        return (comparitor >= range[0] && comparitor <= range[1]);
    };

    $(":text").css("border", "2px solid red");
    // start the test onBlur, rather than on keyup
    $(":text").blur(function () {
        var enteredData = $(this).val()
        console.log(enteredData);
        if (enteredData == "") {
            $(this).css("border", "2px solid red");
        } else {
            $(this).css("border", "inherit");
        }
        if ($(this).attr("id") == "ESNList") {
            esnList = enteredData.split(',');
        }

        // loop through your values...
        for (var i = 0; i < esnList.length; i++) {
            // store the current value, rather than re-parseInt'ing it for every comparison
            var intVal = parseInt(esnList[i]);

            debug("intVal = " + intVal);

            // now, find out if an activeRange has been set
            if(activeRange == -1) {
                // if not, we need to find out what the activeRange is
                if (withinRange(intVal, ranges[0])) {
                    activeRange = ranges[0];
                } else if (withinRange(intVal, ranges[1])) {
                    activeRange = ranges[1];
                } else if (withinRange(intVal,ranges[2])) {
                    activeRange = ranges[2];
                } else if (withinRange(intVal,ranges[3])) {
                    activeRange = ranges[3];
                }
            } else {
                // if an activeRange has been set already, 
                // we need to find out if the current item is outside the activeRange
                if (!withinRange(intVal, activeRange)) {
                    debug("Value out of active range.");
                }
            }

            // Now that you know what your activeRange should be, you can
            // decide what to set your drop down lists to reflect
            switch (activeRange) {
                case ranges[0]:
                    $("#ddl_StxName").val("stx2");
                    $("#ddl_rtumodel").val("globalstar");
                    break;
                case ranges[1]:
                    $("#ddl_StxName").val("mmt");
                    $("#ddl_rtumodel").val("globalstar");
                    break;
                case ranges[2]:
                    $("#ddl_StxName").val("stm3");
                    $("#ddl_rtumodel").val("stmcomtech");                        
                    break;
                case ranges[3]:
                    $("#ddl_StxName").val("smartone");
                    $("#ddl_rtumodel").val("globalstar");
                    break;
                default:
                    debug("Value out of range.");
                    break;
            }
        }
    });
});
于 2013-01-30T19:46:39.920 に答える