6

我是淘汰赛js的新手。每次文本框中的文本发生变化时,我都想调用一个函数。我进行了一些研究并实施了,keyup但它们无法正常工作。如果有人可以给我一个解决方案,或者请将我重定向到一些对我的场景有帮助的文档。如果有关于淘汰赛 Js 中可用的所有事件(内置和自定义)的某种文档,那将非常有帮助。keydownkeypress

要具体说明问题:

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

在 Js 中:

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

它不适用于 key up。对于简单的解决方案,请给我一些提醒已写入文本框中的字符串的长度(在输入和删除的每个文本上)。

4

4 回答 4

8

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

data-bind="value: targetProp, valueUpdate: 'afterkeydown'"
于 2013-07-28T07:12:55.820 回答
8

或者您可以使用最新 KO 3.2中的textInput绑定

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

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

于 2014-08-25T19:49:32.373 回答
3

您也可以手动订阅更改。

确保 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);
});
于 2013-07-28T17:38:58.837 回答
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.

视图模型 JS

self.description = ko.observable("");
self.descriptionCount = ko.observable(255);
self.calcDescriptionCount = function(){
    this.descriptionCount(255 - $("#description").val().length);
};
于 2017-06-01T02:12:37.817 回答