J'utilise numberField dans le formulaire ExtJS et je souhaite entrer uniquement des nombres positifs, dans une plage de 0 à 99 et il ne devrait accepter que 2 caractères (et pas plus de 2).
{
xtype:"textfield",
allowNegative: false,
allowDecimals: false,
minValue: 0,
maxValue: 99,
maxLength: 2
}
donne une erreur dans le code ci-dessus mais il accepte plus de 2 caractères.
J'ai aussi essayé ci-dessous mais le problème est le même:
{
xtype:"textfield",
regex: /^\d{0,2}$/,
regexText: "<b>Error</b></br>Invalid Number entered.",
validator: function(v) {
return /^\d{0,2}$/.test(v)?true:"Invalid Number";
}
}
Comment restreindre l'entrée de plus de 2 caractères?
si vous utilisez la version 3, la documentation maxLength
de TextField décrit l'utilisation de la propriété autoCreate
pour indiquer la longueur maximale (l'exemple de documentation montre un NumberField mais il est également pris en charge par la classe TextField):
maxLength: Number Longueur maximale du champ de saisie autorisée par validation (par défaut, Number.MAX_VALUE). Ce comportement est destiné à fournir retour instantané à l'utilisateur en améliorant la convivialité pour permettre le collage et l'édition ou le doublage et le suivi. Pour limiter le maximum nombre de caractères pouvant être entrés dans le champ utilise autoCreate pour ajouter les attributs souhaités à un champ, par exemple:
var myField =
new Ext.form.NumberField({
id: 'mobile',
anchor:'90%',
fieldLabel: 'Mobile',
maxLength: 16, // for validation
autoCreate: {tag: 'input', type: 'text', size: '20', autocomplete:
'off', maxlength: '10'} });
En utilisant la version 4, un TextField a la propriété enforceMaxLength
.
Si vous souhaitez utiliser un regex, les deux versions prennent en charge la propriété maskRe
, bien que je ne pense pas que cela empêche les valeurs non valides collées.
Vous ne savez pas si vtype existait avant ExtJS 4.x, mais voici comment vous pouvez utiliser vtype.
var validMileRadius = /^([0-9]{1,4})/;
Ext.apply(Ext.form.field.VTypes, {
// vtype validation function
radius: function(val, field) {
return validMileRadius.test(val);
},
radiusText: 'Not a Valid Radius.'
});
{
xtype: 'textfield',
width: 40,
maxLength : 4,
style : {marginLeft:'10px'},
id : 'cityRadius',
enforceMaxLength :4,
vtype : 'radius'
}
Merci Punith
POUR TOUT LE MONDE, QUI RESTE SUR LE MEME
Pour ExtJS 4.x, vous n'avez même pas besoin de créer de VType. De la documentation ExtJS 4.x pour Ext.form.field.Number
:
enforceMaxLength : Boolean
True to set the maxLength property on the underlying input field. Defaults to false
Donc, il vous suffit de spécifier maxLength et de définir enforceMaxLength sur true. Selon le post précédent, cela pourrait ressembler à ceci:
{
xtype: 'textfield',
width: 40,
maxLength : 4,,
enforceMaxLength : true
style : {marginLeft:'10px'},
id : 'cityRadius'
}
Juste une aide, mais pour restreindre un champ de texte à n'autoriser que des chiffres, vous pouvez définir les propriétés du champ de texte avec l'attribut "maskRe". Il vous permet de créer des masques avec des expressions régulières. Voici un masque qui vous permet de ne saisir que les chiffres:
{
xtype: 'textfield',
fieldLabel: 'Text Field(numbers-only)',
enforceMaxLength:true, //Restrict typing past maxLength: n
maxLength: 8, //Set max length validation
maskRe:/[0-9.]/ //Allow only numbers
},
Pour définir dynamiquement la longueur maximale, je propose ce remplacement:
Ext.override(Ext.form.field.Number, {
/**
* Setter: this method will set the maxLength variable on our NumberField
* class, and on its actual dom element, so we can actually restrict the user
* from entering over the maxLength
* @param {Number} maxLength
*/
setMaxLength: function(maxLength) {
this.maxLength = maxLength;
var inputEl = this.inputEl;
if (inputEl) {
var domEl = inputEl.dom;
if (domEl) {
domEl.maxLength = maxLength;
}
}
},
/**
* Shortcut method for setting the maxLength based on the maxValue... if
* maxValue is not set, then 0 is used, which means the maxLength will be 1
*/
setMaxLengthFromMaxValue: function() {
var maxValue = this.maxValue || 0;
if (maxValue >= 0) {
this.setMaxLength(maxValue.toString().length);
}
}
});
maxLength: 2,
enforceMaxLength: true,
Son utilisation très simple utilise maskre config pour restreindre textfield . If vous permet de saisir uniquement des chiffres et des alphabets.
xtype: 'textfield',
fieldLabel: 'Text Field(numbers-only)',
enforceMaxLength:true,
maxLength: 8,
maskRe: /[A-Za-z0-9]/