I would like to add new inputs using jQuery, however, after clicking the add input which uses jQuery to add another of such element below, it removes the inputs before.
var num = 2;
document.getElementById('add').addEventListener("click", addInput);
function addInput() {
var newInput = `
<div>
<input type="date" id="start" name="avail[startdate${num}] value="" min="" max="" />
<input type="range" name = "avail[startdate${num}] value="" min="0" max="23" oninput="this.nextElementSibling.value = this.value" >
<output>12</output><span>:00 (GMT+8) </span>
</div>
`
// '<input type="text" name="input'+num+'"/><br> <br>';
document.getElementById('demo').innerHTML += newInput;
num++;
}
document.querySelectorAll('input[type="range"]').forEach((input) => {
input.addEventListener('mousedown', () => window.getSelection().removeAllRanges());
});
<p>Availability</p>
<div id="demo">
<div class="">
<input type="date" id="start" name="avail[startdate1]" value="" min="" max="">
<input type="range" value="" name="avail[startdate1]" min="0" max="23" oninput="this.nextElementSibling.value = this.value">
<output>12</output><span>:00 (GMT+8) </span>
<br>
</div>
</div>
<input type="button" id="add" value="Add input" />
2
Answers
By using
document.getElementById('demo').innerHTML
you are updating the current HTML inside the demo div. you may use another id or instead ofinnerHTML
you may use jQueryappend
.Catch your elements (in example
parent
). UsinginsertAdjacentHTML
you can append new element on catching element without loosing previous state of range.Example: