【问题标题】:Parsing Strings and Integers in JavaScript在 JavaScript 中解析字符串和整数
【发布时间】:2020-07-22 19:22:01
【问题描述】:

我是 JavaScript 和 HTML 的新手,希望有人能注意到我做错了什么(我敢肯定这可能是我遗漏的一些小东西)。我已经看了一段时间了,我似乎无法弄清楚。

问题是分支#2(在代码中的注释中标识)返回NaN 用于houseVal,它应该返回sf 用于单户或tw 用于联排别墅/公寓.

我正在制作一个 JavaScript 表单。这里是:

function getPrice() {
        var form = document.getElementById("calc");
        var out = form.elements["z"];
        //get numbers
        var sqftVal = parseInt(form.elements["sqft"].value);
        var bathsVal = parseInt(form.elements["baths"].value);
        var builtVal = parseInt(form.elements["built"].value);
        var lotVal = parseInt(form.elements["lot"].value);

        for (i = 0; i < document.forms[0].zipcode.length; i++) {
          if (document.forms[0].zipcode[i].checked) {
            var zipVal = parseInt(document.forms[0].zipcode[i].value);
          }
        }

        for (i = 0; i < document.forms[0].gar.length; i++) {
          if (document.forms[0].gar[i].checked) {
            var garageVal = parseInt(document.forms[0].gar[i].value);
          }
        }

        for (i = 0; i < document.forms[0].housetype.length; i++) {
          if (document.forms[0].housetype[i].checked) {
            var houseVal = parseInt(document.forms[0].housetype[i].value);
          }
        }
          
        if (zipVal == "47") {
            if (garageVal == "2") {
                if (houseVal == "sf") {
                    out.value = 1; 
                }
                else { //townhouse
                    out.value = houseVal; // <------ PROBLEM: returns NaN <------------
                }
            }
            else { //garage == 3
                if (houseVal == "sf") {
                    out.value = 3; 
                }
                else { //townhouse
                    out.value = 4;
                }
            }
        }
        else { //zip == 20148
            if (garageVal == "2") {
                if (houseVal == "sf") {
                    out.value = 5; 
                }
                else { //townhouse
                    out.value = 6; 
                }
            }
            else { //garage == 3
                if (houseVal == "sf") {
                    out.value = 7; 

                }
                else { //townhouse
                    out.value = 8; 
                    
                }
            }
        }
      }
    </script>

这是表格的家庭类型(例如,单身家庭或联排别墅/公寓)部分。

...
<fieldset>
        <legend>House Type</legend>
        <div>
          <input type="radio" id="sf" name="housetype" value="sf" />
          <label for="sf">Single Family</label>
        </div>
        <div>
          <input type="radio" id="tw" name="housetype" value="tw" />
          <label for="tw">Townhouse/Condo</label>
        </div>
</fieldset>
...

【问题讨论】:

  • 这一行var houseVal = parseInt(document.forms[0].housetype[i].value 试图将字符串解析为数字,显然它失败了。
  • 我假设您正在其他地方检查 out.value 是一个数字,这是实际错误。您突出显示的行将其设置为字符串。您声明它是 2 个字符串值之一,但在您的 else 语句中,您将其设置为字符串值而不是数字(如 if 的原始部分)

标签: javascript html forms button


【解决方案1】:

看起来在您的 javascript 代码中,您正试图将 houseVal 转换为整数,尽管它只是“sf”或“tw”

如果更改以下块:


        for (i = 0; i < document.forms[0].housetype.length; i++) {
          if (document.forms[0].housetype[i].checked) {
            var houseVal = parseInt(document.forms[0].housetype[i].value);
          }
        }

收件人:


        for (i = 0; i < document.forms[0].housetype.length; i++) {
          if (document.forms[0].housetype[i].checked) {
            var houseVal = document.forms[0].housetype[i].value;
          }
        }

你应该很好

【讨论】:

    【解决方案2】:

    每个单选按钮的值属性都是基于字母的字符串。你不能在基于字母的字符串上使用 parseInt 。

    var houseVal = parseInt(document.forms[0].housetype[i].value);
    

    这会给你带来麻烦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 2023-03-31
      • 2021-02-23
      • 1970-01-01
      • 2013-04-23
      相关资源
      最近更新 更多