1

I have an input like below. I want to keep its value after the page is refreshed. notice that I have the name attribute, not class or ID.

<input type="text" name="name" onkeyup="saveValue(event)"/> 
<input type="text" name="age" onkeyup="saveValue(event)"/> 
<script type="text/javascript">
var nameArr = ["name"];
nameArr.forEach(function(el){
  document.getElementsByName(el)[0].value = getSavedValue(el);  
})

function saveValue(e) {
  var name = e.target.name;
  var val = e.target.value;
  localStorage.setItem(name, val);
}

function getSavedValue(v) {
  if (!localStorage.getItem(v)) {
    return "";
  }
  return localStorage.getItem(v);
}
</script>

it only works for 1 input.I want something that works on unlimited number of inputs.

hamed dehghan
  • 471
  • 7
  • 15
  • Possible duplicate of [Save data to local storage](https://stackoverflow.com/questions/23743862/save-data-to-local-storage) – Charlie May 26 '19 at 11:46

2 Answers2

0

document.getElementsByName("name") returns an array. if you are sure that there is only one element with the name 'name' then use

document.getElementsByName("name")[0].value = getSavedValue("name");
0

Change parameter of saveValue to event:

<input type="text" name="name" onkeyup="saveValue(event)"/>

Since there are many elements with different names, maintain an array:

var nameArr = ["name"]; // Add more elements here
nameArr.forEach(function(el){
  document.getElementsByName(el)[0].value = getSavedValue(el);  
})

Inside saveValue use e.target, instead of e

var name = e.target.name;
var val = e.target.value;

These should get the code working. Here's a working Codepen

Anurag Srivastava
  • 14,077
  • 4
  • 33
  • 43