Comment puis-je définir le maxlength
dans un textarea
? Et pourquoi maxlength
ne fonctionne pas correctement dans textarea
?
Avant HTML5, nous avons un moyen simple mais pratique: définissez d'abord un attribut maxlength dans l'élément textarea:
<textarea maxlength='250' name=''></textarea>
Utilisez ensuite JavaScript pour limiter les entrées utilisateur:
$(function() {
$("textarea[maxlength]").bind('input propertychange', function() {
var maxLength = $(this).attr('maxlength');
if ($(this).val().length > maxLength) {
$(this).val($(this).val().substring(0, maxLength));
}
})
});
Assurez-vous de lier les événements "input" et "propertychange" pour le faire fonctionner sur divers navigateurs tels que Firefox/Safari et IE.
Si vous utilisez HTML 5, vous devez le spécifier dans votre déclaration DOCTYPE
.
Pour un document HTML 5 valide, il doit commencer par:
<!DOCTYPE html>
Avant HTML 5, l'élément textarea
n'avait pas d'attribut maxlength
.
Vous pouvez le voir dans le DTD/spec :
<!ELEMENT TEXTAREA - - (#PCDATA) -- multi-line text field -->
<!ATTLIST TEXTAREA
%attrs; -- %coreattrs, %i18n, %events --
name CDATA #IMPLIED
rows NUMBER #REQUIRED
cols NUMBER #REQUIRED
disabled (disabled) #IMPLIED -- unavailable in this context --
readonly (readonly) #IMPLIED
tabindex NUMBER #IMPLIED -- position in tabbing order --
accesskey %Character; #IMPLIED -- accessibility key character --
onfocus %Script; #IMPLIED -- the element got the focus --
onblur %Script; #IMPLIED -- the element lost the focus --
onselect %Script; #IMPLIED -- some text was selected --
onchange %Script; #IMPLIED -- the element value was changed --
%reserved; -- reserved for possible future use --
>
Afin de limiter le nombre de caractères saisis dans un textarea
, vous devrez utiliser javascript avec l'événement onChange
. Vous pouvez ensuite compter le nombre de caractères et interdire la saisie ultérieure.
Ici est une discussion approfondie sur la saisie de texte et comment utiliser les scripts côté serveur et client pour limiter la taille.
Ici est un autre exemple.
un moyen simple de faire maxlength pour textarea en html4 est:
<textarea cols="60" rows="5" onkeypress="if (this.value.length > 100) { return false; }"></textarea>
Changez le "100" pour autant de caractères que vous voulez
Comme je l'ai dit dans un commentaire à la réponse de aqingsao, cela ne fonctionne pas vraiment quand le textarea
a des caractères de nouvelle ligne, au moins sous Windows.
J'ai légèrement changé sa réponse ainsi:
$(function() {
$("textarea[maxlength]").bind('input propertychange', function() {
var maxLength = $(this).attr('maxlength');
//I'm guessing JavaScript is treating a newline as one character rather than two so when I try to insert a "max length" string into the database I get an error.
//Detect how many newlines are in the textarea, then be sure to count them twice as part of the length of the input.
var newlines = ($(this).val().match(/\n/g) || []).length
if ($(this).val().length + newlines > maxLength) {
$(this).val($(this).val().substring(0, maxLength - newlines));
}
})
});
Maintenant, quand j'essaie de coller beaucoup de données avec des sauts de ligne, j'obtiens exactement le bon nombre de caractères.
$(function(){
$("#id").keypress(function() {
var maxlen = 100;
if ($(this).val().length > maxlen) {
return false;
}
})
});
<p>
<textarea id="msgc" onkeyup="cnt(event)" rows="1" cols="1"></textarea>
</p>
<p id="valmess2" style="color:red" ></p>
function cnt(event)
{
document.getElementById("valmess2").innerHTML=""; // init and clear if b < max
allowed character
a = document.getElementById("msgc").value;
b = a.length;
if (b > 400)
{
document.getElementById("valmess2").innerHTML="the max length of 400 characters is
reached, you typed in " + b + "characters";
}
}
maxlength n'est valable que pour HTML5. Pour HTML/XHTML, vous devez utiliser JavaScript et/ou PHP. Avec PHP vous pouvez utiliser strlen par exemple. Cet exemple indique uniquement la longueur maximale, il ne bloque PAS l'entrée.
essaye ça
$(function(){
$("textarea[maxlength]")
.keydown(function(event){
return !$(this).attr("maxlength") || this.value.length < $(this).attr("maxlength") || event.keyCode == 8 || event.keyCode == 46;
})
.keyup(function(event){
var limit = $(this).attr("maxlength");
if (!limit) return;
if (this.value.length <= limit) return true;
else {
this.value = this.value.substr(0,limit);
return false;
}
});
});
Pour moi, fonctionne vraiment parfait sans sauter/montrer des personnages supplémentaires; fonctionne exactement comme maxlength en entrée
Avant HTML5, il est uniquement possible de vérifier cela avec JavaScript ou par une vérification côté serveur (mieux, car JavaScript ne fonctionne évidemment qu'avec JavaScript activé ...). Il n'y a pas d'attribut natif de longueur maximale pour les zones de texte.
Étant donné que HTML5 est un attribut valide, il peut être utile de définir votre doctype en HTML5. Je ne sais pas si tous les navigateurs prennent en charge cet attribut, cependant:
<!DOCTYPE html>