2013-05-07 10 views
9

Ho una casella di testo di input associata a uno knockout js osservabile.Gestire il pulsante di cancellazione di IE 9 e 10 con rilegatura Knockout

<input id="searchTextBox" class="searchTextBox" type="text" maxlength="25" 
     title="Search" placeholder="Search" 
     data-bind="value: GridVm.FilterText, 
     valueUpdate: 'afterkeydown', 
     disable: GridVm.Data().length == 0" /> 

Il problema è che il FilterText osservabile non aggiorna quando l'utente clicca sulla x in IE.

Ho trovato che posso remove the x (vedere la schermata nella domanda collegata), ma questa è l'ultima risorsa (mi piace la funzione). This forum says there is no event fired when the x is clicked.

C'è un evento che posso utilizzare per forzare un aggiornamento di Knockout osservabile o un buon modo per farlo in Knockout?

+0

prova il clic vincolante – CodeThug

risposta

11

Se basta cambiare

valueUpdate: 'afterkeydown' 

a

valueUpdate: 'input' 

si aggancia quell'evento per attivare l'aggiornamento del valore. È complessivamente migliore perché gestisce anche le azioni basate sugli appunti e le azioni di trascinamento del testo.

+0

Bella scoperta! Questo ha funzionato anche per me. Sto cambiando con il tuo come risposta e aggiornamento del mio Fiddle. – Aligned

+0

Sì soluzione perfetta. –

+0

Ho scoperto che la modifica del data-bind dal valore in textInput ha risolto il problema in modo corretto. Per impedirne l'aggiornamento dopo ogni tasto, l'ho reso un parametro limitativo della frequenza: http://knockoutjs.com/documentation/rateLimit-observable.html per i dettagli. –

4

L'ho calcolato utilizzando input event e Knockout's event binding. Ecco my JsFiddle showing the solution con il codice qui sotto.

<input type="search" id="input1" data-bind="value: textForBox, valueUpdate: 'afterkeydown', 
    event: { input: cleared }" /> 
var vm = { 
    textForBox: ko.observable(), 
    cleared: function (data, event) { 
     if (event.currentTarget.value === '') { 
      this.textForBox(''); 
     } 
    } 
}; 
ko.applyBindings(vm); 
Problemi correlati