【问题标题】:Understanding why I need parseInt() in that case [duplicate]了解为什么在这种情况下我需要 parseInt() [重复]
【发布时间】:2015-03-06 15:10:34
【问题描述】:

对于表单验证,我使用了一个非常简单的比较。 If y >= x 然后返回false

我已经通过使用parseInt() 解决了我的问题,但我不明白为什么我需要这个函数只用于一个值。吃代码:

function validateForm() {
        var x = parseInt(document.forms["einstform"]["zeit1"].value);
        var y = parseInt(document.forms["einstform"]["zeit2"].value);
        if (y >= x) {
            alert("Nope." + " " + x + " " + y);
            return false;
        }
    }

这是我的表格:

<form name="einstform" action="a file" method="GET" onSubmit="return validateForm();">

    <select name="zeit1">
      <option value="30">1 Month</option>
      <option value="60" selected>2 Months</option>
      <option value="90">3 Months</option>
    </select>

    <select name="zeit2">
      <option value="0">Never</option>
      <option value="7">1 Week</option>
      <option value="14" selected>2 Weeks</option>
      <option value="21">3 Weeks</option>
      <option value="30">4 Weeks</option>
      <option value="42">6 Weeks</option>
      <option value="60">8 Weeks</option>
      <option value="84">12 Weeks</option>
    </select>

我想这很容易理解。它只是比较选定的值并在y &gt;= x 时取消表单提交。它工作得很好,是的。但是如果我在第二个选择“1 周”(值 = 7)中选择,脚本总是告诉我 7 >= 30。

当然,它可能会为 7 获得一个字符串值,因为我必须使用 parseInt()(并且它可以工作)。

但为什么除了7 之外,所有其他值的 int 比较都能完美运行?

这只是随机告诉我“总是使用parseInt()”还是有更多可以理解为什么7 拒绝成为int 值?

【问题讨论】:

  • 如果不将值解析为整数,则将其解释为字符串并且 "7" >= "3"
  • 因为.value 是一个字符串。如果没有parseInt,您将执行字典比较,而不是数学比较
  • @wye 我读了你的回答,它完全符合我的问题。抱歉,我之前没有找到那个答案(没想到字典比较,我的错)。

标签: javascript


【解决方案1】:

如果你不使用parseInt()解析值,它是一个字符串。

否则你会得到一个string &gt;= string

现在是7 &gt;= 3

【讨论】:

  • 所以所有的非 7 都起作用只是运气,因为它们的字母顺序排在第一位?
  • 这是因为如果你使用字符串代替它会检查字符。
  • 我阅读了相关答案,它完全适合。是的,我现在明白了。谢谢,你为我省了一大笔疗养院的钱。
猜你喜欢
  • 2013-01-25
  • 1970-01-01
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
相关资源
最近更新 更多