2013-09-25 16 views
5

Ho una configurazione maschera su un campo data utilizzando il modulo maschere angolare-ui in questo modo:angularjs maschera caratteri di override

<input type="text" 
    id="date" 
    ng-model="transaction.date" 
    ui-mask="99/99/9999" /> 

Se ho 30.05.2013 in campo e voglio cambiare che a 10/05/2013 semplicemente inserendo un "1" all'inizio, spinge tutti i caratteri in modo che diventi 13/00/5201.

C'è modo per forzare ui-maschera per sovrascrivere il carattere invece di inserirla? (Questo permetterebbe di risparmiare qualcuno da colpire 'delete' poi il carattere

Esempio:. http://jsfiddle.net/5NbD7/ Se si digita '30' sulla parte anteriore del mio esempio si finirà con 30/01/0120 avrei preferito che ignorare il caratteri e produrre 30/01/2010

+1

Potrebbe mettere su un jsfiddle? – Strawberry

+1

L'ho controllato e non capisco perché vorresti che l'UX si comportasse in quel modo. Quindi vuoi che cancelli un personaggio durante la digitazione? Cosa succede se l'utente non vuole cancellare un personaggio? Penso che sia molto più intuitivo di quello che stai chiedendo. – Strawberry

+0

Ciò funzionerebbe bene nelle schermate di immissione dei dati in cui stiamo cercando di salvare ogni sequenza di tasti. – map7

risposta

4

non so che c'è un modo più semplice, ma si prova quanto segue:

  • Sarà necessario scaricare mask.js, non terminato, dal sorgente e collegarlo nel proprio html, se non lo si è già fatto.

https://rawgithub.com/angular-ui/ui-utils/master/modules/mask/mask.js

  • allora si avrà bisogno di modificare il codice sorgente di mask.js come questo (seach per il commento //Update Values e inserire questo codice sottostante):

...

  // Update values 
      if (oldValueUnmasked !== "" && oldValueUnmasked!==valUnmasked && !isDeletion) { 
      var charIndex = maskCaretMap.indexOf(caretPos); 
      if (charIndex === -1) { 
       charIndex = maskCaretMap.indexOf(caretPos+1); 
      } 
      valUnmasked=valUnmasked.substr(0,charIndex).concat(oldValueUnmasked.substr(charIndex,valUnmasked.length)); 
      } 

...

Ora, prima di aggiornare il valore, maschera eseguirà una concatenazione dei caratteri nel vecchio valore e quelli nel nuovo valore, a seconda della posizione del cursore (cursore).

Non è affatto una soluzione a prova di ferro, ma dovrebbe darti un'idea di dove guardare se vuoi personalizzare di più l'input o controllare che questo cambiamento non si rompa nient'altro.

Fiddle: http://jsfiddle.net/CALvj/

1

Penso che il modo in cui i caratteri digitati vengono inseriti o sovrascrivi il testo di input dipende dalla modalità di inserimento corrente della tastiera. Gli utenti possono semplicemente modificare il valore predefinito premendo il tasto Ins. L'unico modo per cambiare da codice sarebbe forzatura premere il tasto Ins, ma questo non è consentito in Javascript.

+0

Se si preme il tasto 'inserisci' in un campo di testo o in una textarea, non lo cambia per sovrascrivere il testo. – map7