Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get Knockout JS to data-bind on keypress instead of lost-focus?

This example of knockout js works so when you edit a field and press TAB, the viewmodel data and hence the text below the fields is updated.

How can I change this code so that the viewmodel data is updated every keypress?

alt text

<!doctype html> <html>     <title>knockout js</title>     <head>         <script type="text/javascript" src="js/knockout-1.1.1.debug.js"></script>         <script type="text/javascript">         window.onload= function() {              var viewModel = {                 firstName : ko.observable("Jim"),                 lastName : ko.observable("Smith")             };             viewModel.fullName = ko.dependentObservable(function () {                 return viewModel.firstName() + " " + viewModel.lastName();             });              ko.applyBindings(viewModel);        }         </script>     </head>     <body>         <p>First name: <input data-bind="value: firstName" /></p>         <p>Last name: <input data-bind="value: lastName" /></p>         <h2>Hello, <span data-bind="text: fullName"> </span>!</h2>     </body> </html> 
like image 405
Edward Tanguay Avatar asked Dec 08 '10 10:12

Edward Tanguay


People also ask

What is two-way binding in Knockout js?

KO is able to create a two-way binding if you use value to link a form element to an Observable property, so that the changes between them are exchanged among them. If you refer a simple property on ViewModel, KO will set the form element's initial state to property value.

What is data bind in Knockout js?

Knockout's declarative binding system provides a concise and powerful way to link data to the UI. It's generally easy and obvious to bind to simple data properties or to use a single binding.


1 Answers

<body>         <p>First name: <input data-bind="value: firstName, valueUpdate: 'afterkeydown'" /></p>         <p>Last name: <input data-bind="value: lastName, valueUpdate: 'afterkeydown'" /></p>         <h2>Hello, <span data-bind="text: fullName"> </span>!</h2> </body> 

From the documentation

Additional parameters

  • valueUpdate

    If your binding also includes a parameter called valueUpdate, this defines which browser event KO should use to detect changes. The following string values are the most commonly useful choices:

    • "change" (default) - updates your view model when the user moves the focus to a different control, or in the case of elements, immediately after any change

    • "keyup" - updates your view model when the user releases a key

    • "keypress" - updates your view model when the user has typed a key. Unlike keyup, this updates repeatedly while the user holds a key down

    • "afterkeydown" - updates your view model as soon as the user begins typing a character. This works by catching the browser’s keydown event and handling the event asynchronously.

Of these options, "afterkeydown" is the best choice if you want to keep your view model updated in real-time.

like image 188
Sergei Golos Avatar answered Oct 07 '22 08:10

Sergei Golos