2012-04-23 11 views
5

Zgodnie z dokumentacją (knockoutjs.com/documentation/submit- binding.html) powiązanie knockout-a z wysyłką ma tę zaletę, że przechwytuje alternatywne sposoby przesłania formularza, takie jak naciśnięcie klawisza Enter podczas pisania w polu tekstowym. Mam siatkę w moim formularzu i niektórzy użytkownicy próbują użyć klawisza Enter, aby przejść z jednego pola do drugiego. Czy istnieje sposób na uniknięcie przesyłania formularza, gdy tak się dzieje?Czy istnieje sposób na uniknięcie tego, że zgłoszenie knockout-a do wysyłania wysyła formularz po naciśnięciu klawisza Enter?

Odpowiedz

8

Jedną z opcji jest dodanie do formularza również obsługi keypress, która absorbuje klawisz Enter. to będzie wyglądać:

<form data-bind="event: { keypress: absorbEnter }, submit: test"> 
    <div data-bind="absorbEnter: true"> 
    <input data-bind="value: name"> 
    <input type="submit" value="Go" /> 
    </div> 
</form> 

JS:

var viewModel = { 
    name: ko.observable("test"), 
    absorbEnter: function(data, event) { 
     return event.keyCode !== 13; 
    }, 
    test: function() { 
     console.log("submitting", arguments);   
    } 
}; 
ko.applyBindings(viewModel); 

Próbka tutaj: http://jsfiddle.net/rniemeyer/FvZXj/2/

+0

Tak Ryan, który absolutnie pracował !! Dziękuję Ci. – jgarza

+0

Można nawet dodać go do bindingHandler, aby wyjąć go z modelu widoku, takie jak: http://jsfiddle.net/rniemeyer/FvZXj/3/ –

+0

może KO rozróżnić między kluczem w górę i kluczem w dół? – FutuToad

Powiązane problemy