无法在JQuery中检查多个if else条件

时间:2019-03-28 07:10:27

标签: javascript jquery html if-statement

我正在尝试在JQuery中检查某些多个条件,但未返回所需的结果。无论我输入了什么,它总是进入其他条件。

$(function() {
  $('#installment').on("keydown keyup", check);
  function check() {
    var inst = Number($("#installment").val());
    if (inst === 2 || inst === 4 || inst === 6 || inst === 12) {
      return true;
    } else {
      $("#installment").val('');
      alert("you can not set wrong value");
      return false;
    }
  }
});
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<tr>
  <td>Number of Installment</td>
  <td><input type="text" name="installment" id="installment"></td>
</tr>

4 个答案:

答案 0 :(得分:1)

问题出在 keydown更新之前触发的 value 。因此,如果您输入“ 2”。该值将返回'',而Number('')0,因此它总是转到else 只需删除keydown事件即可,仅使用keyup

$(function() {
  $('#installment').on("keyup", check);

  function check() {
    var inst = Number($("#installment").val());
    console.log(inst)
    if (inst === 2 || inst === 4 || inst === 6 || inst === 12) {
      return true;
    } else {
      $("#installment").val('');
      alert("you can not set wrong value");
      return false;
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<tr>
  <td>Number of Installment</td>
  <td><input type="text" name="installment" id="installment"></td>
</tr>

如评论中的 @Radu Diță 所述,如果12不能修正为您可以使用String.prototype.startsWith() 1就永远无效。

$(function() {
  $('#installment').on("keyup", check);
  function check() {
    var inst = Number($("#installment").val());
    console.log(inst)
    if (inst === 2 || inst === 4 || inst === 6 || '12'.startsWith(String(inst))) {
      return true;
    } else {
      $("#installment").val('');
      alert("you can not set wrong value");
      return false;
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<tr>
  <td>Number of Installment</td>
  <td><input type="text" name="installment" id="installment"></td>
</tr>

答案 1 :(得分:1)

$(function() {
    var val = $("#installment").val();
  $('#installment').on("keydown keyup",
  function () {
    var inst = Number($("#installment").val());
    if (inst === 2 || inst === 4 || inst === 6 || inst === 12) {
      alert("OK");
     return false;
    } else {
      $("#installment").val('');
      alert("you can not set wrong value");
      //return false;
    }
  });
});

答案 2 :(得分:0)

问题是您的subset(sample, let %in% names(which(rowSums(table(sample)) >=4))) 事件在修改输入值之前触发。改用keydown(或更好的keyup):

input
$(function() {
  $('#installment').on("input", check);

  function check() {
    var inst = parseInt($("#installment").val());
    if (inst == 2 || inst == 4 || inst == 6 || inst == 12) {
      return true;
    } else {
      $("#installment").val('');
      alert("you can not set wrong value");
      return false;
    }
  }
});

答案 3 :(得分:0)

尝试一下:

$(function() {
  $('#installment').on("keydown keyup", check);
  function check(event) {
    var inst = $(this).val();
    if (inst === "") {
        return;
    }
    if (inst == 2 || inst == 4 || inst == 6 || inst == 12) {
      return true;
    } else {
      $("#installment").val('');
      alert("you can not set wrong value");
      return false;
    }
  }
});
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<tr>
  <td>Number of Installment</td>
  <td><input type="text" name="installment" id="installment"></td>
</tr>

在此代码中,if开始工作,但仅适用于246。它不适用于12,因为第一个输入是1,您不需要验证,而无需验证keydown和keyup中的输入,一旦用户写完然后验证,就尝试使用blur随您喜欢。

$(function() {
  $('#installment').on("blur", check);
  function check(event) {
    var inst = Number($(this).val());
    if (inst === 2 || inst === 4 || inst === 6 || inst === 12) {
      return true;
    } else {
      $("#installment").val('');
      alert("you can not set wrong value");
      return false;
    }
  }
});
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<tr>
  <td>Number of Installment</td>
  <td><input type="text" name="installment" id="installment"></td>
</tr>