Je développe un nombre de caractères pour mon textarea sur ce website . À l'heure actuelle, NaN est indiqué, car il ne semble pas trouver la longueur du nombre de caractères dans le champ, qui est 0 au début, donc 500. Aucune erreur ne s'est produite dans la console des outils de développement de Chrome. Tout mon code est sur le site, j'ai même essayé d'utiliser jQuery un JavaScript standard pour le nombre de caractères du champ textarea, mais rien ne semble fonctionner.
Dites-moi ce qui ne va pas dans jQuery et dans le code JavaScript de mon fichier contact.js.
$(document).ready(function() {
var tel1 = document.forms["form"].elements.tel1;
var tel2 = document.forms["form"].elements.tel2;
var textarea = document.forms["form"].elements.textarea;
var clock = document.getElementById("clock");
var count = document.getElementById("count");
tel1.addEventListener("keyup", function (e){
checkTel(tel1.value, tel2);
});
tel2.addEventListener("keyup", function (e){
checkTel(tel2.value, tel3);
});
/*$("#textarea").keyup(function(){
var length = textarea.length;
console.log(length);
var charactersLeft = 500 - length;
console.log(charactersLeft);
count.innerHTML = "Characters left: " + charactersLeft;
console.log("Characters left: " + charactersLeft);
});​*/
textarea.addEventListener("keypress", textareaLengthCheck(textarea), false);
});
function checkTel(input, nextField) {
if (input.length == 3) {
nextField.focus();
} else if (input.length > 0) {
clock.style.display = "block";
}
}
function textareaLengthCheck(textarea) {
var length = textarea.length;
var charactersLeft = 500 - length;
count.innerHTML = "Characters left: " + charactersLeft;
}
$("#textarea").keyup(function(){
$("#count").text($(this).val().length);
});
Ce qui précède fera ce que vous voulez. Si vous voulez faire un décompte, changez-le en ceci:
$("#textarea").keyup(function(){
$("#count").text("Characters left: " + (500 - $(this).val().length));
});
Sinon, vous pouvez accomplir la même chose sans jQuery
en utilisant le code suivant. (Merci @Niet)
document.getElementById('textarea').onkeyup = function () {
document.getElementById('count').innerHTML = "Characters left: " + (500 - this.value.length);
};
textarea.addEventListener("keypress", textareaLengthCheck(textarea), false);
Vous appelez textareaLengthCheck
et affectez ensuite sa valeur de retour à l'écouteur d'événements. C'est pourquoi il ne met pas à jour ou ne fait rien après le chargement. Essaye ça:
textarea.addEventListener("keypress",textareaLengthCheck,false);
À part ça:
var length = textarea.length;
textarea
est le texte réel, pas la valeur. Essayez ceci à la place:
var length = textarea.value.length;
Combiné avec la suggestion précédente, votre fonction devrait être:
function textareaLengthCheck() {
var length = this.value.length;
// rest of code
};
Voici deux scénarios où l'événement keyup
ne sera pas déclenché:
Utilisez plutôt l'événement HTML5 input
pour une solution plus robuste:
<textarea maxlength='140'></textarea>
JavaScript ( démo ):
var textarea = document.querySelector("textarea");
textarea.addEventListener("input", function(){
var maxlength = this.getAttribute("maxlength");
var currentLength = this.value.length;
if( currentLength >= maxlength ){
console.log("You have reached the maximum number of characters.");
}else{
console.log(maxlength - currentLength + " chars left");
}
});
Et si vous voulez absolument utiliser jQuery:
$('textarea').on("input", function(){
var maxlength = $(this).attr("maxlength");
var currentLength = $(this).val().length;
if( currentLength >= maxlength ){
console.log("You have reached the maximum number of characters.");
}else{
console.log(maxlength - currentLength + " chars left");
}
});
Voici un code simple. J'espère que ça marche
$(document).ready(function() {
var text_max = 99;
$('#textarea_feedback').html(text_max + ' characters remaining');
$('#textarea').keyup(function() {
var text_length = $('#textarea').val().length;
var text_remaining = text_max - text_length;
$('#textarea_feedback').html(text_remaining + ' characters remaining');
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="textarea" rows="8" cols="30" maxlength="99" ></textarea>
<div id="textarea_feedback"></div>
Ce code obtient la valeur maximale de l'attribut maxlength
de la textarea
et diminue la valeur lorsque l'utilisateur tape.
< D&EACUTE;MO >
var el_t = document.getElementById('textarea');
var length = el_t.getAttribute("maxlength");
var el_c = document.getElementById('count');
el_c.innerHTML = length;
el_t.onkeyup = function () {
document.getElementById('count').innerHTML = (length - this.value.length);
};
<textarea id="textarea" name="text"
maxlength="500"></textarea>
<span id="count"></span>
Pour ceux qui souhaitent une solution simple sans jQuery, voici une solution.
textarea et le conteneur de messages à mettre dans votre formulaire:
<textarea onKeyUp="count_it()" id="text" name="text"></textarea>
Length <span id="counter"></span>
JavaScript:
<script>
function count_it() {
document.getElementById('counter').innerHTML = document.getElementById('text').value.length;
}
count_it();
</script>
Le script compte les caractères initialement, puis pour chaque frappe, puis place le nombre dans la plage du compteur.
Martin
J'ai trouvé que la réponse acceptée ne fonctionnait pas exactement avec textarea
s pour les raisons indiquées dans Chrome compte les caractères incorrects dans textarea avec l'attribut maxlength en raison des caractères de nouvelle ligne et de retour à la ligne, ce qui est important si vous avez besoin de savoir combien d'espace aurait être pris en compte lors du stockage des informations dans une base de données. De plus, l'utilisation de keyup est dépréciée à cause du glisser-déposer et du collage de texte dans le presse-papiers, c'est pourquoi j'ai utilisé les événements input
et propertychange
. Ce qui suit prend en compte les caractères de nouvelle ligne et calcule avec précision la longueur de textarea
.
$(function() {
$("#myTextArea").on("input propertychange", function(event) {
var curlen = $(this).val().replace(/\r(?!\n)|\n(?!\r)/g, "\r\n").length;
$("#counter").html(curlen);
});
});
$("#counter").text($("#myTextArea").val().replace(/\r(?!\n)|\n(?!\r)/g, "\r\n").length);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<textarea id="myTextArea"></textarea><br>
Size: <span id="counter" />
var maxchar = 10;
$('#message').after('<span id="count" class="counter"></span>');
$('#count').html(maxchar+' of '+maxchar);
$('#message').attr('maxlength', maxchar);
$('#message').parent().addClass('wrap-text');
$('#message').on("keydown", function(e){
var len = $('#message').val().length;
if (len >= maxchar && e.keyCode != 8)
e.preventDefault();
else if(len <= maxchar && e.keyCode == 8){
if(len <= maxchar && len != 0)
$('#count').html(maxchar+' of '+(maxchar - len +1));
else if(len == 0)
$('#count').html(maxchar+' of '+(maxchar - len));
}else
$('#count').html(maxchar+' of '+(maxchar - len-1));
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="message" name="text"></textarea>
$(document).ready(function(){
$('#characterLeft').text('140 characters left');
$('#message').keydown(function () {
var max = 140;
var len = $(this).val().length;
if (len >= max) {
$('#characterLeft').text('You have reached the limit');
$('#characterLeft').addClass('red');
$('#btnSubmit').addClass('disabled');
}
else {
var ch = max - len;
$('#characterLeft').text(ch + ' characters left');
$('#btnSubmit').removeClass('disabled');
$('#characterLeft').removeClass('red');
}
});
});
Ils disent que IE a des problèmes avec l'événement input
, mais à part cela, la solution est plutôt simple.
ta = document.querySelector("textarea");
count = document.querySelector("label");
ta.addEventListener("input", function (e) {
count.innerHTML = this.value.length;
});
<textarea id="my-textarea" rows="4" cols="50" maxlength="10">
</textarea>
<label for="my-textarea"></label>