I am having two textareas one under another
<div class="form-group"> <span id="textarea_feedback1"></span> <span> 🖊Characters left</span> <br> <textarea name="answer1" id="answer1" rows="4" placeholder="Type your answer here" areaid="1"></textarea> <hr> <span id="textarea_feedback2"></span> <span> 🖊Characters left</span> <br> <textarea name="answer2" id="answer2" rows="4" placeholder="Type your answer here" areaid="2"></textarea> </div>
Both textareas are created dynamically and they have different id and name attr. At some point, they might be 2, 3, 4… and so on. What I am trying to do is to create a char counter for each textarea that also applies dynamically.
It would have had been easy if the number of the textareas was fixed (i.e, always 2).
But I am having trouble finding a way to apply one and the same JQuery script to textareas with a different name and id attribute.
I was thinking about adding a unique attribute like areaid="" to each textarea, so I can somehow modify dynamically the script.
This is the script I have
$(document).ready(function() {
var text_max = 400;
$('#textarea_feedback1').html('<span>'+text_max + '</span>');
$('#answer1').on('input click keyup', function() {
var text_length = $('#answer1').val().length;
var text_remaining = text_max - text_length;
$('#textarea_feedback1').html('<span>'+text_remaining + '</span>');
});
});
Basically, what I think that it should happen is, that based on the areaid attr to also change the value of the span id="textarea_feedback" and textatea id="answer" to match the areaid value, so somehow the script would work separately to as many textareas I have.
Here is jsfiddle
Advertisement
Answer
Wrap that span and the textarea in an element like div so you can access both easily.
;window.onload = function(){
var text_max = 400;
for(var tL=document.querySelectorAll('.dummy textarea'), i=0, j=tL.length; i<j; i++){
$(tL[i]).on('input click keyup', function(){
var text_length = this.value.length;
var text_remaining = text_max - text_length;
this.parentNode.querySelector('span').textContent = text_remaining
})
}
};<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="form-group"> <div class = 'dummy'> <span id="textarea_feedback1"></span> <span> 🖊Characters left</span> <br> <textarea name="answer1" id="answer1" rows="4" placeholder="Type your answer here" areaid="1"></textarea> </div> <hr> <div class = 'dummy'> <span id="textarea_feedback2"></span> <span> 🖊Characters left</span> <br> <textarea name="answer2" id="answer2" rows="4" placeholder="Type your answer here" areaid="2"></textarea> </div> </div>