我有一个如下所示的值绑定:
<textarea class="form-control" placeholder="Comments" rows="10" data-bind="value: $root.GetTabComment($data).Comment, valueUpdate: 'keyup'"></textarea>
我使用keyup
的原因是因为我有一个“按键输出时保存”系统设置。这在用户键入时效果很好,但是如果他们通过拼写检查来纠正拼写(使用鼠标点击而根本没有键盘),则绑定将不会更新。
绑定变量Comment声明为:
Comment = ko.observable("").extend({throttle: 1000})
订阅只是:
Comment.subscribe(function(){
//save code
});
单击按钮时,是否有某种方法可以强制绑定获取文本区域的当前值?
答案 0 :(得分:5)
您可以尝试使用keyup
:
input
valueUpdate: 'input'
<强> KnockoutJS - The "value" binding 强>
&#34;输入&#34; - 当&lt; input&gt;的值时更新您的视图模型或&lt; textarea&gt;元素变化。请注意,此事件仅由相当现代的浏览器引发(例如,IE 9 +)。
以下是我发现并改编的示例JSFiddle(originally authored by Michael Best),说明了它的用法,它可以处理击键和鼠标点击以及限制:
<强> HTML:强>
<p>Type stuff here:
<input data-bind='value: instantaneousValue, valueUpdate: "input"' /></p>
<p>Current throttled value: <b data-bind='text: throttledValue'> </b></p>
<div data-bind="visible: loggedValues().length > 0">
<h3>Stuff you have typed:</h3>
<ul data-bind="foreach: loggedValues">
<li data-bind="text: $data"></li>
</ul>
</div>
<强> JS:强>
function AppViewModel() {
this.instantaneousValue = ko.observable();
this.throttledValue = ko.computed(this.instantaneousValue)
.extend({ throttle: 400 });
// Keep a log of the throttled values
this.loggedValues = ko.observableArray([]);
this.throttledValue.subscribe(function (val) {
if (val !== '')
this.loggedValues.push(val);
}, this);
}
ko.applyBindings(new AppViewModel());
答案 1 :(得分:0)
Series
更适合'保存时输入'
您只需将textInput
替换为value:
它可以更好地处理浏览器差异。