TAG
CSS
JavaScript
Result
Run
License
<form class="myform"> <label for="content">Message</label> <textarea id="content" placeholder="Enter your message" required></textarea> <div><button id="btn-test" type="button">Test</button></div> <label>Min Length: </label> <input type="range" id="minlength" value="20" min="10" max="100" /> <label>Max Length: </label> <input type="range" id="maxlength" value="20" min="10" max="100" /> </form>
.myform { display: flex; flex-direction: column; row-gap: 10px; justify-content: center; } .myform > label:nth-child(n+3)::after { content: attr(data-maxlength); color: red; }
window.addEventListener("load", () => { const $elContent = document.getElementById("content"); const $elBtnTest = document.getElementById("btn-test"); const $nlElRange = document.querySelectorAll("input[type='range']"); $elBtnTest.addEventListener("click", e => { e.currentTarget.form.reportValidity(); }); $nlElRange.forEach(elInput => { elInput.addEventListener("input", e => { const $elCurTarget = e.currentTarget; $elCurTarget.previousElementSibling.dataset.maxlength = $elCurTarget.value; if($elCurTarget.id == "minlength") { try { $elContent.minLength = $elCurTarget.value; } catch(err) { $elCurTarget.previousElementSibling.dataset.maxlength = err.message } } else { try { $elContent.maxLength = $elCurTarget.value; } catch(err) { $elCurTarget.previousElementSibling.dataset.maxlength = err.message } } }); }); $nlElRange[0].dispatchEvent(new Event("input")); $nlElRange[1].dispatchEvent(new Event("input")); });
Console
expand_less
License
License
by DevDic
Close