KnockoutJS: How to update view model after a user copy'n'paste into a text field?

前端 未结 2 530
礼貌的吻别
礼貌的吻别 2021-02-01 05:32

I am working on a website that auto populates search result in a table after user entered some text in the input text box (similar to google instant search).

I managed t

相关标签:
2条回答
  • 2021-02-01 05:48

    You can use valueUpdate:'input'. I have testet it to work in Opera, Firefox and Chrome. I'm on a Linux box, so I can't test it in IE. Check this fiddle

    UPDATE: I have now testet it in IE8, and it doesn't work. But using the following seems to work.

    valueUpdate:['afterkeydown','propertychange','input']
    

    Thanks to Michael Best for his comment about this :) I have updated the fiddle

    UPDATE okt 2014: As kzh mention in a comment below, in one of the later versions of Knockout.js the textInput binding was added. This binding handles this scenario and has build in browser quirks handling http://knockoutjs.com/documentation/textinput-binding.html

    0 讨论(0)
  • 2021-02-01 06:10

    New Way

    Instead of:

    data-bind="value: myValue, valueUpdate: ['input', 'textchange']"
    

    One can now use the textInput binding:

    data-bind="textInput: myValue"
    

    From the documentation:

    The textInput binding links a text box (<input>) or text area (<textarea>) with a viewmodel property, providing two-way updates between the viewmodel property and the element’s value. Unlike the value binding, textInput provides instant updates from the DOM for all types of user input, including autocomplete, drag-and-drop, and clipboard events.

    Old Way

    valueUpdate: ['afterkeydown','propertychange','input']
    

    Does not work in IE9 if you want to support RightMouseClickDelete or RightMouseClickCut.

    The solution I came up with involves using jQuery and a jQuery plugin called jQuery Splendid Textchange. After you have both the jQuery and the plugin scripts loaded, you can happily use the 'textchange' event.

    valueUpdate: 'textchange'
    

    But, I may one day stop supporting bad browsers, so I have this:

    valueUpdate: ['input', 'textchange']
    

    Here is a fiddle I made for testing this and other events: http://jsfiddle.net/kaleb/w3ErR/

    N.B. If you are using requirejs, jquery may have to be a hard dependency of knockout for this to work properly all the time.

    0 讨论(0)
提交回复
热议问题