Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

parseInt returns NaN when it should be a number?

I have the following code:

$(function() {
    var $form = $("#pollAnswers"),
        $radioOptions = $form.find("input[type='radio']"),
        $existingDataWrapper = $(".web-app-item-data"),
        $webAppItemName = $existingDataWrapper.data("item-name"),
        $formButton = $form.find("button");
    
        $radioOptions.on("change",function(){
    
          $formButton.removeAttr("disabled");
    
          var chosenField = $(this).data("field"), 
              answer_1 = parseInt($existingDataWrapper.data("answer-1")),
              answer_2 = parseInt($existingDataWrapper.data("answer-2")),
              answer_3 = parseInt($existingDataWrapper.data("answer-3"));
            
            console.log("1 =" + answer_1);
            console.log("2 =" + answer_2);
            console.log("3 =" + answer_3);
            
            //Additional code not related to question
         });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="web-app-item-data" data-item-name="Test" data-answer-1="0"  data-answer-2="0"  data-answer-3="0"></div>

<form id="pollAnswers">
    <div class="answers">
        <input type="radio" name="radioChoice" data-field="CAT_Custom_2"> Answer 1<br>
        <input type="radio" name="radioChoice" data-field="CAT_Custom_4"> Answer 2<br>
        <input type="radio" name="radioChoice" data-field="CAT_Custom_6"> Answer 3<br>
    </div>
<button type="submit" disabled>Submit</button>
</form>

When you run the code you will see in your console that Answers 1, 2 and 3 all return NaN.

Update:

As Charlie H pointed out in a comment, if I remove parseInt it returns undefined.

I don't see the error in the code for why it isn't pulling the data attribute values from the div.

How do I solve this issue?

like image 739
L84 Avatar asked Dec 07 '25 01:12

L84


1 Answers

jQuery 2.1.3 does not appear to recognize data- attributes that contain a name-segment that consists only of numbers. For instance, these work:

  • data-answer as .data()["answer"]
  • data-foo as .data()["foo"]
  • data-foo-bar as .data()["fooBar"]

These do not:

  • data-answer-1

  • data-foo-bar-3

jQuery 3 appear to behave more as expected.

like image 197
S McCrohan Avatar answered Dec 08 '25 14:12

S McCrohan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!