i'm trying to create a function that count the characters inside a input tag of a signup form.
document.getElementById('username').onkeyup = function() {
document.getElementById('caratteriRimanentiUsername').innerText = "Caratteri: " this.value.length "/30";
};
<div >
<span >Username</span>
<input id="username" type="text" name="username" placeholder="Inserisci il tuo username">
<span id="caratteriRimanentiUsername">Caratteri: 0/30</span>
</div>
Inside the JS file there are other functions that use onkeyup can that be a problem?

CodePudding user response:
I don't think that is the correct syntax to add an event listener to a node. Also, make sure the DOM is loaded and parsed before you add the listener.
I think the following code should do what you want (provided that the DOM node exists and has been parsed):
const input = document.getElementById('username');
const characterCountDisplay = document.getElementById('caratteriRimanentiUsername')
let inputLength = 0;
input.addEventListener('keyup', event => {
inputLength = event.target.value.length
characterCountDisplay.textContent = `Caratteri: ${inputLength}/30`
})
CodePudding user response:
To clarify your question regarding .onkeyup:
It can indeed be a problem if used again on the same element:
element.onkeyup will overwrite previously assigned .onkeyup (or even inline element onkeyup="" event handlers.
element.addEventListener('keyup', yourFunction) is usually the preferred way, as it lets you add multiple eventListeners to the same element (and remove.addEventListener still lets you remove them if needed) .
CodePudding user response:
Maybe you need to place your script after the element.
<div >
<span >Username</span>
<input id="username" type="text" name="username" placeholder="Inserisci il tuo username">
<span id="caratteriRimanentiUsername">Caratteri: 0/30</span>
</div>
<script>
document.getElementById('username').onkeyup = function() {
document.getElementById('caratteriRimanentiUsername').innerText = "Caratteri: " this.value.length "/30";
};
</script>
