2013-07-28 6 views
6

Sono nuovo di knockout js. Voglio chiamare una funzione ogni volta che un testo cambia all'interno di una casella di testo. Ho ricercato abit e implementato keyup, keydown e keypress ma non hanno funzionato correttamente. Se qualcuno mi può dare una soluzione o ti preghiamo di reindirizzare a un documento che è utile per il mio scenario. E se ci fosse una sorta di documentazione su tutti gli eventi (integrati e personalizzati) disponibili in knockout Js, sarebbe davvero utile.evento knockout.js che tiene traccia di ogni cambio di testo all'interno di una casella di testo di input

per essere precisi in merito al problema:

data-bind="value: targetProp, event:{keyup: $parent.changeProp}" 

E in Js:

Inside parent: 
    this.changeProp = function() { 
       if (condition..) { 
         do something... 
       } 
      } 

Non funziona con il tasto su. Per una soluzione semplice, per favore dammi qualcosa che avvisi la lunghezza della stringa che è stata scritta all'interno di una casella di testo (su ogni testo inserito ed eliminato). Grazie in anticipo.

+0

In ko 3.2 questo è solo un semplice oneliner. Controlla [questa risposta] (http://stackoverflow.com/a/25493308/1090562) –

risposta

2

È anche possibile iscriversi alle modifiche manualmente.

Assicurarsi che il targetProp è osservabile, e quando si costruisce il genitore, iscriviti manualmente le modifiche:

parent.targetProp = ko.observable(originalValue); 

parent.targetProp.subscribe(function(newValue) { 
    alert("The new value is " + newValue); 
}); 

Edit: per un'opzione di rilegatura:

<select data-bind="options: myObservableArray, value: selectedValue"></select> 

in js :

self.selectedValue = ko.observable(); 

poi:

self.selectedValue.subscribe(function(newValue) { 
    alert("The new value is " + newValue); 
}); 
+0

Grazie a @JoanCharmant, questo ha aiutato. E puoi suggerire come posso eseguire un'attività simile sull'aggiornamento del valore SelectedIndex o sull'aggiornamento del valore SelectedValue sull'associazione delle opzioni? – user79307

+0

@accssharma: vedi la mia modifica. Vorrei utilizzare un osservabile dedicato per il valore selezionato e iscriverti ad esso. –

+0

Grazie a @JoanChartmant, ho anche trovato 'valueUpdate: 'change'' per sottoscrivere anche il valore aggiornato dell'opzione selezionata. – user79307

8

È possibile utilizzare valueUpdate: 'afterkeydown' che aggiorna il modello di visualizzazione non appena l'utente inizia a digitare un carattere.

data-bind="value: targetProp, valueUpdate: 'afterkeydown'" 
+0

In realtà quel valore: targetProp è vincolato all'interno di un foreach e il suo valore è dinamico all'interno del genitore. Per dinamica, voglio dire che il numero di voci (targetProp) può essere aggiunto e rimosso e voglio tracciare il testo di ogni voce creata dinamicamente. Quindi, dovrei implementare la soluzione all'interno del genitore e sono un po 'confuso come? Capisco come aggiorni il valore, ma ora sono confuso da come posso rintracciarlo all'interno di un evento all'interno di un genitore foreach. – user79307

+0

@accssharma Puoi pubblicare ulteriori dettagli e codice nella domanda? Non è molto chiaro quello che stai cercando di fare. –

+0

Grazie ragazzi, l'ho appena fatto sottoscrivendo il valore aggiornato all'interno del genitore che mi mancava da fare. :) – user79307

8

Oppure si può utilizzare textInput vincolante dall'ultimo KO 3,2

<input data-bind="textInput: userName" />

Oltre aggiornamenti in tempo reale, si gestisce correttamente taglia/incolla, trascinamento, completamento automatico.

0

Se si desidera calcolare in tempo reale, come la persona sta digitando, è possibile farlo.

HTML

<input type="text" id="description" class="form-control" maxlength="255" 
data-bind="value:description, event:{keyup:calcDescriptionCount}"> 
<br> 
<span data-bind="text:descriptionCount"></span> charactors left. 

ViewModel JS

self.description = ko.observable(""); 
self.descriptionCount = ko.observable(255); 
self.calcDescriptionCount = function(){ 
    this.descriptionCount(255 - $("#description").val().length); 
}; 
Problemi correlati