2013-05-07 11 views
9

Mam wejściowe pole tekstowe powiązane z knockout js obserwowalne.Uchwyt Jasny przycisk IE 9 i 10 z opcją 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" /> 

Problem polega na tym, że obserwowalny obiekt FilterText nie aktualizuje się, gdy użytkownik kliknie x w IE.

Znalazłem, że mogę remove the x (zobacz zrzut ekranu w połączonym pytaniu), ale to ostatnia deska ratunku (podoba mi się ta funkcja). This forum says there is no event fired when the x is clicked.

Czy jest jakieś wydarzenie, którego mogę użyć, aby wymusić obserwowalną aktualizację Knockout lub dobry sposób na zrobienie tego w Knockout?

+0

spróbuj wiązania kliknij – CodeThug

Odpowiedz

11

Jeśli tylko zmienić

valueUpdate: 'afterkeydown' 

do

valueUpdate: 'input' 

Przechwytuje to wydarzenie do wyzwalania aktualizację wartości. Jest ogólnie lepszy, ponieważ obsługuje również akcje oparte na schowkach i akcje przeciągania tekstu.

+0

Nice find! To działało również dla mnie. Zmieniam się na twoją jako odpowiedź i aktualizuję moje Fiddle. – Aligned

+0

Tak, idealne rozwiązanie. –

+0

Stwierdziłem, że zmiana powiązania danych z wartości na textInput sprawnie rozwiązała problem. Aby zatrzymać aktualizację po każdym kluczu, ograniczyłem obserwację limitu: http://knockoutjs.com/documentation/rateLimit-observable.html po szczegóły. –

4

Wyliczyłem to używając input event i Knockout's event binding. Oto my JsFiddle showing the solution z kodem poniżej.

<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); 
Powiązane problemy