2010-06-24 11 views
10

Ho un requisito per mascherare un campo zip in modo che consenta il classico formato a 5 cifre (XXXXX) o 5 + 4 (XXXXX-XXXX).jQuery zip masking per più formati

ho potuto così qualcosa di simile:

$('#myZipField').mask("?99999-9999"); 

ma la complicazione deriva dal fatto che trattino non deve essere visualizzato se l'utente mette in soli 5 cifre.

Questo è il migliore che ho trovato finora - Potrei estenderlo per inserire automaticamente il trattino quando inseriscono la sesta cifra, ma il problema con questo sarebbe un comportamento divertente sulla cancellazione (potrei impedire loro di cancellare il dash ma sarebbe l'applicazione di patch la patch e così via, diventa un incubo):

$.mask.definitions['~']='[-]'; 
$("#myZipField").mask("?99999~9999", {placeholder:""}); 

esiste un fuori del modo scatola di fare questo o devo rotolare il mio?

+1

Ho questo stesso problema, vero mai trovare una soluzione appropriata? Grazie! –

+1

@BenL. non proprio - ho finito per dividere i campi in più caselle di testo – JohnIdol

+0

Questo potrebbe aiutare: https://igorescobar.github.io/jQuery-Mask-Plugin/ –

risposta

9

È non è necessario utilizzare un plug-in diverso. Basta spostare il punto di domanda, in modo che invece di:

$('#myZipField').mask("?99999-9999"); 

si dovrebbe usare:

$('#myZipField').mask("99999?-9999"); 

Dopo tutto, non è l'intera stringa che è opzionale, solo il - ed in avanti.

-1

Perché il campo non deve essere trasparente e avere un oggetto testo dietro di esso con il modulo in grigio chiaro? Quindi vedono ####### - #### sullo sfondo e quindi lo rig in modo che le lettere scompaiano mentre digitano. A quel punto, suggerisce che dovrebbero inserire un trattino se vogliono mettere i quattro in più, giusto? Quindi, puoi semplicemente impostare lo script per autoinserire il trattino se si incasina e digitare 6 numeri?

0

Questo codice di avviamento postale è in realtà semplice, ma quando si ha un formato più complesso da gestire, ecco come è risolto con il plugin (dal demo page):

var options = {onKeyPress: function(cep, e, field, options){ 
    var masks = ['00000-000', '0-00-00-00']; 
    mask = (cep.length>7) ? masks[1] : masks[0]; 
    $('.crazy_cep').mask(mask, options); 
}}; 

$('.crazy_cep').mask('00000-000', options);