2014-07-21 11 views
8

I proprietari delle mie applicazioni desiderano che i campi di testo selezionati siano maiuscoli come se il blocco maiuscole fosse attivo. Sto usando un viewmodel KnockoutJS con osservabili per questi campi. C'è un modo in cui posso effettivamente convertire qualsiasi testo inserito dall'utente in maiuscolo?Come modificare il testo per i campi selezionati in maiuscolo usando KnockoutJS?

ho messo un evento input sui controlli che volevo cambiare, ma ha scoperto che anche se funziona, le osservabili non vengono aggiornati.

<input type="text" maxlength="80" data-bind="value: colorName, disable: $parent.isReadOnly, event: { 'input': toUpper }" /> 

toUpper: function (d, e) { 
    if (e.target) { 
     if (e.target.value) { 
      e.target.value = e.target.value.toUpperCase(); 
     } 
    } 
} 

Ho anche pensato di mettere una classe CSS ucase sui controlli Voglio essere maiuscole e poi o sul client o server, risparmiando quei campi in maiuscolo.

.ucase { 
    text-transform: uppercase; 
} 

risposta

8

Si potrebbe estendere le caratteristiche osservabili -

<input data-bind="value: colorName, valueUpdate:'afterkeydown'" /> 

ko.extenders.uppercase = function(target, option) { 
    target.subscribe(function(newValue) { 
     target(newValue.toUpperCase()); 
    }); 
    return target; 
}; 

var colorName = ko.observable().extend({ uppercase: true }); 

violino esempio - http://jsfiddle.net/kbFwK/

In pratica ogni volta che il valore cambia convertirà il valore del osservabile in maiuscolo.

Lo svantaggio è che in realtà cambia il valore e sarebbe memorizzare in questo modo pure. Si può sempre virare su una proprietà calcolata sull'osservabile solo per scopi di visualizzazione. Puoi farlo utilizzando un ko.computed, un gestore di binding personalizzato (poiché è solo per la presentazione) o qualcosa di simile. Se questo è più di ciò che stai cercando fammelo sapere con un commento.

Modifica

Aggiornato con afterkeydown - http://jsfiddle.net/kbFwK/2/

+0

ho bisogno di avere l'ingresso superiore con carter mentre l'utente è come se il caps lock chiave è su. Ho dimenticato di menzionarlo nel mio post iniziale. Ho aggiornato la mia domanda. Questa è una buona idea però. – DaveB

+0

Tutto ciò che devi fare è farlo sul tasto giù. L'ho aggiunto al mio violino. –

+0

Mi piace usare l'extender. Grazie per l'aiuto! – DaveB

Problemi correlati