web-dev-qa-db-fra.com

jquery masqué le plugin d'entrée pour ne pas vider le champ en cas d'erreur

Je regarde le http://digitalbush.com/projects/masked-input-plugin/

J'appelle ça comme ça:

$(control).mask('999-999-9999');

Et je ne veux pas qu'il jette les données des utilisateurs si quelque chose ne va pas, par exemple. ils n'ont pas fini

[407-555-____]

Si vous quittez le champ après avoir tapé cela beaucoup, cela l'efface. J'aimerais le laisser pour qu'ils puissent finir plus tard.

JQuery est nouveau dans la boutique et j'ai consulté ses sources, mais je ne trouve aucun moyen de le faire, pas plus que je ne trouve aucun moyen de le modifier pour accomplir ce que je veux, car le code est obscur pour moi les yeux.

30
McKay

Il semble que je devrais simplement rendre le masque entier facultatif:

mask('?999-999-9999')

De cette façon, le contrôle pense que ce que l'utilisateur a est "valide" et je peux continuer. Même si ce n'est pas vraiment la partie optionnelle du masque.

44
McKay

Définissez l'option autoclear sur false.

$(control).mask('999-999-9999', {autoclear: false});
51
Angela Nicholas

Vous devez supprimer l'instruction input.val(""); dans la fonction checkVal() pour une solution appropriée.

Si vous utilisez la version minifiée, vous devriez rechercher et supprimer l'instruction:

if(!a&&c+1<i)f.val(""),t(0,k);else
2
Ahmet Polat

En plus de supprimer input.val ("") dans checkVal (), vous pouvez également remplacer l'appel par clearBuffer . Dans le code d'origine, il est: clearBuffer (0, len); supprimer toutes les entrées utilisateur . si vous changez ceci en clearBuffer (lastMatch + 1, len); la saisie de l'utilisateur sera affichée, suivie des espaces réservés du masque qui sont toujours nécessaires pour compléter la saisie correcte.

J'ai également ajouté un message d'utilisateur dans le .bind. Cela fonctionne pour nous, car nous utilisons le MaskedInput pour exactement un type d’entrée. Je vérifie que toute entrée allant au-delà de la position 7, car c'est là que commence la saisie de l'utilisateur.

Voici ce que j'ai fait:

.bind("blur.mask", function() {
    // find out at which position the checkVal took place
    var pos = checkVal();
    // if there was no input, ignore
    if (pos <=7) {input.val(""); clearBuffer(0, len);}  
    // if the user started to input something, which is not complete, issue an alert
    if (pos > 7 && pos < partialPosition) alert("Tell the user what he needs to do.");
    if (input.val() != focusText)
    input.change();
})
0
user2220787

Essayez le fichier de mise à jour jquery.maskedinput.js

Dans la fonction function checkVal (autoriser), définissez le paramètre autoriser sur true. Son aide pour moi.

 function checkVal(allow) {
                    allow = true; ///add this command
//..............
}
0
Pepa

L'ajout d'un espace réservé pourrait résoudre le problème.

$(control).mask('999-999-9999');

Ajouter un titulaire vide dans le masque. voir ci-dessous

$(control).mask('999-999-9999', { placeholder: "" });

qui remplacerait _ par défaut sur le champ de saisie. donc il ne resterait plus que _ si la longueur d’entrée est dynamique et non fixée. 

0
Prabir Choudhhury