Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

value of HTML element is undefined but it is set

I want to set checkbox after the page has renderet to the matching state of the backend.

I implemented this function for that purpose what does the job so far

Updated to user-suggestion It doesn't matter if cbs[i].dataset.thvalue or cbs[i].dataset.value

 function updateCheckboxes () {

  let activeCheckbox = '<input type="checkbox" onclick="handleClickOnReduce()" checked>'
  let inactiveCheckbox = '<input type="checkbox" onclick="handleClickOnReduce()">'

  let cbs = document.getElementsByTagName('td')
  for (let i = 0; i < cbs.length; i++) {
    if (cbs[i].id === 'reduceCheckbox' || cbs[i].id === 'slCheckbox') {
      if (cbs[i].dataset.thvalue === 'true') {
        cbs[i].innerHTML = activeCheckbox
      }
      else {
        cbs[i].innerHTML = inactiveCheckbox
      }
    }
  }
}

HTML part, using Thymeleaf

    <td id="reduceCheckbox" data-th-value="${car.isReduced()}"></td>
    <td id="slCheckbox" data-th-value="${car.isSl()}"></td>

But the browser claims by printing out the value, that it is undefined, even if the value is set as you can see in the picture live from the browser.

enter image description here

Due to the docu my syntax should be correct?

https://www.w3schools.com/jsref/prop_option_value.asp

Any suggestion?

Ty

like image 279
Anna Klein Avatar asked Jul 25 '18 10:07

Anna Klein


2 Answers

You HTML is invalid.

<td> elements do not have value attributes. (The link you reference is talking about <option>, not <td>).

Your browser is not mapping the JS value property onto your invented attribute.

If you want to add arbitrary data to an element, use a data-* attribute and read it using the dataset API.

like image 178
Quentin Avatar answered Oct 31 '22 13:10

Quentin


It looks like my misunderstanding of the Thymeleaf syntax with regards to th-data led to that issue.

This is the fix:

<td id="reduceCheckbox" th:attr="data-value=${car.isReduced()}"></td>

Access via

 console.log(cbs[i].dataset.value)
like image 45
Anna Klein Avatar answered Oct 31 '22 15:10

Anna Klein