我正在开发一个网站,用户在输入文本框中输入一些文字后自动填充表格中的搜索结果(类似于谷歌即时搜索)。
当用户通过添加
输入信息时,我设法获得淘汰赛js来更新视图模型 valueUpdate: 'afterkeydown'
进入我的数据绑定属性,但是,我还需要处理用户右键单击并将一些文本粘贴到文本框中的情况,所以我尝试了:
valueUpdate: ['afterkeydown','mouseup']
但是这不起作用,当我尝试通过视图模型读取文本框的值时我一直得到旧值,直到我从输入文本框中删除。
任何人都知道如何解决这个问题?
的奥斯卡
答案 0 :(得分:27)
您可以使用valueUpdate:'input'。我测试它可以在Opera,Firefox和Chrome中使用。我在Linux机器上,所以我无法在IE中测试它。 Check this fiddle
更新:我现在在IE8中测试它,它不起作用。但使用以下似乎可行。
valueUpdate:['afterkeydown','propertychange','input']
感谢Michael Best对此发表评论:)我已更新the fiddle
UPDATE okt 2014:正如kzh在下面的评论中提到的,在Knockout.js的更高版本之一中添加了textInput绑定。此绑定处理此方案并构建了浏览器怪癖处理 http://knockoutjs.com/documentation/textinput-binding.html
答案 1 :(得分:10)
而不是:
data-bind="value: myValue, valueUpdate: ['input', 'textchange']"
现在可以使用textInput binding:
data-bind="textInput: myValue"
来自文档:
textInput
绑定将文本框(<input>
)或文本区域(<textarea>
)与viewmodel属性链接,提供viewmodel属性和元素值之间的双向更新。与value
绑定不同,textInput
为DOM提供所有类型用户输入的即时更新,包括自动完成,拖放和剪贴板事件。
valueUpdate: ['afterkeydown','propertychange','input']
如果你想支持 RightMouseClick →删除或 RightMouseClick →剪切,在IE9中不起作用。< / p>
我提出的解决方案涉及使用jQuery和一个名为jQuery Splendid Textchange的jQuery插件。加载jQuery和插件脚本后,您可以愉快地使用'textchange'事件。
valueUpdate: 'textchange'
但是,我可能有一天会停止支持糟糕的浏览器,所以我有这个:
valueUpdate: ['input', 'textchange']
这是我为测试此事件和其他事件而制作的小提琴:http://jsfiddle.net/kaleb/w3ErR/
N.B。如果你正在使用requirejs,jquery可能必须是淘汰赛的硬依赖,才能使其始终正常工作。