webentwicklung-frage-antwort-db.com.de

jquery maskiertes Eingabe-Plugin, um das Feld im Fehlerfall nicht zu löschen

Ich schaue auf die http://digitalbush.com/projects/masked-input-plugin/

Ich nenne es so:

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

Und ich möchte nicht, dass die Benutzereingaben weggeworfen werden, wenn etwas nicht stimmt, z. Sie sind noch nicht fertig

[407-555-____]

Wenn Sie das Feld verlassen, nachdem Sie so viel eingegeben haben, wird es gelöscht. Ich würde es gerne verlassen, damit sie später fertig werden können.

Ich bin neu bei jQuery, und ich habe seinen Quellcode durchgesehen, aber ich kann keinen Weg finden, das zu tun, und ich kann auch keinen Weg finden, es zu bearbeiten, um das zu erreichen, was ich will, weil der Code für meinen geheim ist Augen.

30
McKay

Es sieht so aus, als sollte ich die ganze Maske optional machen:

mask('?999-999-9999')

Auf diese Weise glaubt das Steuerelement, was der Benutzer hat, "gültig" und ich kann fortfahren. Obwohl es nicht wirklich der optionale Teil der Maske ist.

44
McKay

Setzen Sie die Autoclear-Option auf false.

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

Sie sollten die Anweisung input.val(""); in der Funktion checkVal() löschen, um eine korrekte Lösung zu erhalten.

Wenn Sie eine reduzierte Version verwenden, sollten Sie die Anweisung suchen und löschen:

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

Zusätzlich zum Entfernen von input.val ("") in checkVal () können Sie den Aufruf auch in clearBuffer ..__ ändern. Im ursprünglichen Code ist dies: clearBuffer (0, len); alle Benutzereingaben entfernen . wenn Sie dies in clearBuffer ändern (lastMatch + 1, len); Die Benutzereingabe wird angezeigt, gefolgt von den Maskenplatzhaltern, die noch benötigt werden, um die korrekte Eingabe abzuschließen.

Ich habe auch eine Benutzermeldung in der .bind hinzugefügt. Dies funktioniert für uns, da wir MaskedInput für genau einen Eingabetyp verwenden. Ich suche nach Eingaben, die über Position 7 hinausgehen, da hier die Benutzereingabe beginnt.

Folgendes habe ich getan:

.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

Versuchen Sie die Aktualisierungsdatei jquery.maskedinput.js

In der Funktion function checkVal (allow) setzen Sie den Parameter allow auf true. Es ist für mich eine Hilfe.

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

Das Hinzufügen eines Platzhalters könnte das Problem lösen.

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

Fügen Sie einen leeren Platzhalter in die Maske ein. siehe unten

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

dadurch würde standardmäßig _ im Eingabetextfeld ersetzt. Wenn also die Eingabelänge dynamisch ist und nicht festgelegt ist, bleibt hier ein beliebiger _ übrig. 

0