2012-03-20 8 views
28

Sto guardando la http://digitalbush.com/projects/masked-input-plugin/jquery ingresso mascherato plugin per non chiara campo quando errored

sto chiamando in questo modo:

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

E io non voglio che buttare via la gli utenti inseriscono se qualcosa non va, ad es non hanno finito

[407-555-____] 

Se si lascia il campo dopo aver digitato così tanto, lo cancella. Mi piacerebbe lasciarlo così che possano finire più tardi.

Sono nuovo di jQuery, e ho guardato attraverso la sua fonte, ma non riesco a trovare alcun modo per farlo, né posso trovare alcun modo per modificarlo per realizzare ciò che voglio, perché il codice è arcano ai miei occhi

+0

check this out potrebbe aiutare http://jsfiddle.net/elclanrs/eanS5/ – elclanrs

+0

@elclanrs Non vedo come ciò che riguarda la mia domanda sul plugin di ingresso mascherato. Il tuo codice non esegue alcun mascheramento? – McKay

+0

Oh frainteso la domanda. Pensavo volessi che gli utenti avvisassero mentre erano in sfocatura ma sembra che tu voglia fare l'opposto giusto? – elclanrs

risposta

43

sembra che io dovrei solo fare l'intera maschera opzionale:

mask('?999-999-9999') 

In questo modo il controllo pensa ciò che l'utente ha è "valido" e posso continuare. Anche se non è davvero la parte facoltativa della maschera.

+0

Imposta il valore predefinito dell'elemento su 0? –

+0

è una maschera di stringa, quindi il valore predefinito è la stringa vuota. – McKay

+0

Solo per aggiungere ... Mi sono imbattuto in questo problema e ho provato a regolare il plug-in con // Rimuovi questo per mantenere il testo immesso dall'utente in campo e non distruggere su sfocatura se l'utente non ha raggiunto la lunghezza richiesta \t \t \t \t // else if (lastMatch + 1

2

È necessario eliminare la dichiarazione input.val(""); nella funzione checkVal() per una soluzione adeguata.

Se si utilizza la versione minified, si dovrebbe cercare ed eliminare dichiarazione:

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

Non sono particolarmente un fan della modifica del binario, se ho un problema in giro? – McKay

+1

Hey Dave, non ho idea di farlo in un altro modo. puoi darmi un esempio per favore? –

+0

Non voterò, ma quasi sempre è una pessima idea modificare il codice sorgente. Qualcun altro potrebbe continuare il progetto e aggiornare i componenti a una nuova versione, eliminando qualsiasi modifica non documentata. Anche tu potresti aggiornarlo dimenticandoti di qualche cambiamento criptico che hai fatto mesi fa. – FercoCQ

0

Oltre a rimuovere l'input.val ("") in checkVal() si può anche cambiare la chiamata a clearBuffer . Nel codice originale è: clearBuffer (0, len); rimuovendo tutto l'input dell'utente. se lo si cambia in clearBuffer (lastMatch + 1, len); verrà visualizzato l'input dell'utente, seguito dai segnaposto della maschera che sono ancora necessari per completare l'input corretto.

Ho anche aggiunto un messaggio utente in .bind. Questo funziona per noi, dato che stiamo usando MaskedInput esattamente per un tipo di input. Sto controllando la presenza di input che vanno oltre la posizione 7, perché è da lì che inizia l'input dell'utente.

Ecco quello che ho fatto:

.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

Aggiunta di segnaposto potrebbe risolvere il problema.

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

Aggiungere un segnaposto vuoto nella maschera. vedi sotto

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

che sostituisce _ sul campo di testo di input per impostazione predefinita. quindi non ci sarebbe nessun _ left se la lunghezza dell'input è dinamica e non fissa.

0

file di aggiornamento Prova jquery.maskedinput.js

In Funzione checkVal (permettere) set di parametri permette il vero. Il suo aiuto per me.

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

Imposta l'opzione autoclear su falso.

$(control).mask('999-999-9999', {autoclear: false}); 
+4

Sembra una buona soluzione, sembra la soluzione giusta, ma ahimè, non lavoro più su quel progetto. – McKay

+0

questo funziona .... – Superbiji

+0

Questo lavoro anche per me. Grazie. Mi hai salvato il tempo. – YeeKhin

-2

Cercare nello script di plug-in il metodo di smascheramento.

$('#checkbox').unmask(); 
Problemi correlati