-1

我怎样才能做到这一点,以便 Jquery 检查 HTML 表单中的 ESNStart 和 ESNEND 是否在同一范围内,否则它会在输入 ESNEnd 的值后向用户抛出一个警告,指出两个数字需要在同一范围内?我仍然不明白我是如何做到的,因此 ESNList 会检查其在文本字段中输入的所有多个值是否在同一范围内,否则它还会向用户发出警报,以输入与相同范围内的数字if 语句显示 ? 证明这一点的小提琴将帮助我学到很多东西,非常感谢!

<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 = parseInt(enteredData);
                        switch (true) {
                            case (esnList >= 986329 && esnList <= 999999):
                                $("#ddl_StxName").val("stx2");
                                $("#ddl_rtumodel").val("globalstar");
                                break;
                            case (esnList >= 660000 && esnList <= 699999):
                                $("#ddl_StxName").val("mmt");
                                $("#ddl_rtumodel").val("globalstar");
                                break;
                            case (esnList >= 200000 && esnList <= 299999):
                                $("#ddl_StxName").val("stm3");
                                $("#ddl_rtumodel").val("stmcomtech");
                                break;
                            case (esnList >= 1202114 && esnList <= 1299999):
                                $("#ddl_StxName").val("smartone");
                                $("#ddl_rtumodel").val("globalstar");
                                break;
                        }

                    }
                });
            });
        </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

1

尽管我没有创建超出范围的数字组,但我创建了一些似乎有效的方法。

我强烈建议你不要让用户输入逗号分隔的列表,因为它很难指向用户无效的条目。在自己的输入中包含每个数字会更干净。您可以轻松添加“添加新号码”按钮并为其创建新输入。

我使用数组来存储范围和为其他字段更改的有效范围的值。这个模块不是微不足道的,建议您创建一个测试沙箱,其中包含可以测试的各种数字。

$('#ESNList').keyup(function(){
    var enteredData = $(this).val();
    $(this).removeClass('valid');
    if( enteredData == ''){
        return;
    }
    if(hasMultipleValues(enteredData)){
        var range=rangeCheckMultipleNumbers(enteredData)
      if( range===false){
        log('Numbers not in same range');
        return;
      } else{
          setRangeValues(range);

        $(this).addClass('valid');
      }
    }
    var rangeIdx = getRangeIndex(enteredData);
    if(rangeIdx===false){
        log('Number not in range');
    }else{
        setRangeValues(rangeIdx);           
        $(this).addClass('valid');
    }
});

function hasMultipleValues( str){ 
     /* second test for a singel entry with comma at end*/   
    return str.indexOf(',') !=-1 && str.indexOf(',') != str.length-1;   
}

var ranges = [
    [986329, 999999],
    [660000, 699999],
    [200000, 299999],
    [1202114, 1299999]
];

var rangeText = [
    ["stx2", "globalstar"],
    ["mmt", "globalstar"],
    ["stm3", "stmcomtech"],
    ["smartone", "globalstar"]
]


/* returns range index if all in same range, otherwise returns false*/
function rangeCheckMultipleNumbers(str) {
    var nums = str.split(',');
    var rangeMatch = true; /* clean array to remove empty values if extra commas*/
    nums = $.grep(array, function(item, index) {
        return parseInt(item);
    });

    var groupRange = getRangeIndex(nums[0]);
    if(nums.length > 1) {
        for(i = 1; i < nums.length; i++) {
            if(!checkSameRange(nums[i - 1], nums[i])) {
                rangeMatch = false;
            }
        }
    }

    return rangeMatch ? groupRange : false;
}


function setRangeValues(rangeIndex) {
    $("#ddl_StxName").val(rangeText[rangeIndex][0]);
    $("#ddl_rtumodel").val(rangeText[rangeIndex][1]);
}

function checkSameRange(num1, num2) {
    return getRangeIndex(parseInt(num1, 10)) == getRangeIndex(parseInt(num2, 10));
}
/* returns false if out of range, otherwise returns range index*/
function getRangeIndex(num) {
    var idx = false;
    $.each(ranges, function(i, range) {
        if(num >= range[0] && num <= range[1]) {
            idx = i;
            return false;
        }
    });
    return idx;
}

演示:http: //jsfiddle.net/hXsQ8/1/

于 2013-01-30T01:47:37.600 回答