首页 > 解决方案 > Jquery While 循环不适用于某些值

问题描述

while我的 jQuery 代码中的循环有一个奇怪的情况。我有一个文本框,我想拆分输入...并创建一个数组。然后我想把数组放回文本框。

例如,我把1...3我想要的1,2,3放在文本框中。奇怪的部分是脚本不适用于某些值。如果我1...10说它有效,但是如果我尝试5...10没有任何反应。

这是我的代码,我错过了什么?谢谢。

$(function() {
  $("#test").change(function() {
    var val = $("#test").val();
    var val2 = val.split("...");
    var arr = [];
    var valindex1 = val2[0];
    var valindex2 = val2[1];

    while (valindex1 <= valindex2) {
      arr.push(valindex1);
      valindex1++;

    }
    
    if (arr.length != 0) {
      $("#test").val(arr);
    }
  })
})
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<input id="test" type="text">

标签: jquery

解决方案


问题只是初始拆分数组中的值是字符串,并且字符串“5”小于字符串“10” - 因此您的while循环立即存在而无需创建数字数组。

valindex1您可以通过确保和是数字来修复它valindex2- 最简单的方法是在数组读取之前使用+. 见下文:

$(function() {
  $("#test").change(function() {
    var val = $("#test").val();
    var val2 = val.split("...");
    var arr = [];
    var valindex1 = +val2[0];
    var valindex2 = +val2[1];

    while (valindex1 <= valindex2) {
      arr.push(valindex1);
      valindex1++;
    }
    
    if (arr.length != 0) {
      $("#test").val(arr);
    }
  })
})
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<input id="test" type="text">

为什么它与“1...10”一起工作我相信你想知道。这有点幸运,因为 javascript 会很高兴地评估"1" <= "10"哪个恰好是真的。然后,当您在循环中执行此操作valindex1++;时,它会立即将字符串“1”强制为数字1并增加它。10...20会像许多其他输入一样工作得很好。上面的修复适用于任何输入。


推荐阅读