TransWikia.com

Parsing Strings and Integers in JavaScript

Stack Overflow Asked on November 29, 2021

I am new to JavaScript and HTML and am hoping someone can notice what I am doing wrong (I’m sure it is probably something small that I am just missing). I have been looking at this for a while, and I cannot seem to figure it out.

The problem is that branch #2 (identified in the comment within the code) is returning NaN for the houseVal which is supposed to return either sf for single-family or tw for townhouse/condo.

I have a JavaScript form I am making. Here it is:

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>

and here is the Home Type (e.g., Single Family or Townhouse/Condo) part of the form.

...
<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>
...

2 Answers

Your value attributes for each radio button are letter based strings. You cannot feasibly use parseInt on letter-based strings .

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

This is going to cause you issues.

Answered by Tatiana on November 29, 2021

It looks like in your javascript code you are trying to convert the houseVal to an integer though it's only ever "sf" or "tw"

If you change the following block:


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

To:


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

You should be good

Answered by Spencer Bard on November 29, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP