knockout.js事件跟踪输入文本框内的每个文本更改

时间:2013-07-28 06:57:23

标签: javascript javascript-events knockout.js

我是淘汰赛的新手。我希望每次文本框内的文本更改时都调用一个函数。我研究了abit并实现了keyup,keydown和keypress但它们没有正常工作。如果有人可以给我一个解决方案,或者请将我重定向到一些对我的方案有帮助的文档。如果有关于淘汰赛Js中可用的所有事件(内置和自定义)的某种文档,那将非常有帮助。

具体问题:

  data-bind="value: targetProp, event:{keyup: $parent.changeProp}"

在Js:

    Inside parent:
     this.changeProp = function () {
                if (condition..) {
                       do something...
                }
            }

它无法使用密钥。对于简单的解决方案,请给我一些能够提醒文本框内写入的字符串长度的内容(在每个输入和删除的文本上)。提前谢谢。

4 个答案:

答案 0 :(得分:8)

您可以使用valueUpdate: 'afterkeydown'在用户开始输入字符时立即更新您的视图模型。

data-bind="value: targetProp, valueUpdate: 'afterkeydown'"

答案 1 :(得分:8)

或者您可以使用最新KO的<{3}}绑定 3.2

<input data-bind="textInput: userName" />

除了实时更新外,它还能正确处理剪切/粘贴,拖动,自动完成。

答案 2 :(得分:2)

您也可以手动订阅更改。

确保targetProp是一个可观察的,并且在构建父项时,手动订阅更改:

parent.targetProp = ko.observable(originalValue);

parent.targetProp.subscribe(function(newValue) {
    alert("The new value is " + newValue);
});

编辑:对于选项绑定:

<select data-bind="options: myObservableArray, value: selectedValue"></select>

在js:

self.selectedValue = ko.observable();

然后:

self.selectedValue.subscribe(function(newValue) {
    alert("The new value is " + newValue);
});

答案 3 :(得分:0)

如果您想要实时计算,就像打字的人一样,您可以这样做。

HTML

<input type="text" id="description" class="form-control" maxlength="255" 
data-bind="value:description, event:{keyup:calcDescriptionCount}">
<br>
<span data-bind="text:descriptionCount"></span> charactors left.

ViewModel JS

self.description = ko.observable("");
self.descriptionCount = ko.observable(255);
self.calcDescriptionCount = function(){
    this.descriptionCount(255 - $("#description").val().length);
};