Javascript 敲除JS-textInput绑定更新延迟一个字符

Javascript 敲除JS-textInput绑定更新延迟一个字符,javascript,knockout.js,Javascript,Knockout.js,我目前正在尝试使用knockout.js显示一条消息,该消息依赖于输入文本框内容的即时更新。textInput绑定似乎工作得很好,只是它只在我键入一个字符后更新。在第一个字符上,它表示它没有定义 HTML: 例如,当我键入“hello”时,它会抛出一个错误,表示textInput在“h”上未定义,然后当我键入“ello”时,它会执行我实际希望它执行的操作(即仅显示“数字”消息)。为什么不在第一个输入字符上进行更新?如果你能帮我解决这个问题,我们将不胜感激 编辑: 这是我的日志,当输入框读到“he

我目前正在尝试使用knockout.js显示一条消息,该消息依赖于输入文本框内容的即时更新。textInput绑定似乎工作得很好,只是它只在我键入一个字符后更新。在第一个字符上,它表示它没有定义

HTML:

例如,当我键入“hello”时,它会抛出一个错误,表示textInput在“h”上未定义,然后当我键入“ello”时,它会执行我实际希望它执行的操作(即仅显示“数字”消息)。为什么不在第一个输入字符上进行更新?如果你能帮我解决这个问题,我们将不胜感激

编辑: 这是我的日志,当输入框读到“he”时,“h”抛出错误,“e”尚未被读取

jobCommand.js:81 Uncaught TypeError: Cannot read property 'match' of undefined
at jobCommandContentViewModel.self.responseTypeValidation (jobCommand.js:81)
at ControllerViewModel.keyDown (jobCommand.js:33)
at HTMLDivElement.<anonymous> (appController.js:60)
at HTMLDivElement.dispatch (jquery-3.1.1.js:5201)
at HTMLDivElement.elemData.handle (jquery-3.1.1.js:5009)


ojcore.js:262 input: h
jobCommand.js:81未捕获类型错误:无法读取未定义的属性“match”
在jobCommandContentViewModel.self.responseTypeValidation(jobCommand.js:81)中
在ControllerViewModel.keyDown(jobCommand.js:33)
在HTMLDEVELENT。(appController.js:60)
在htmldevelment.dispatch(jquery-3.1.1.js:5201)
位于htmldevelment.elemData.handle(jquery-3.1.1.js:5009)
js:262输入:h

由于使用textInput,每次击键或其他文本输入机制(例如剪切或拖动文本,不一定会引发任何焦点更改事件)时,此功能会立即更新您的模型

因此:

解决方案1(计算):

解决方案2(订阅):


听起来好像有时间问题-可能是在输入值实际可用于
self.textInput()
之前启动了
responseTypeValidation
?您如何调用
responseTypeValidation
?我也这么认为,直到我尝试将其放入一个函数中,该函数每次按下一个键时都会调用,第一个总是undefined@MichaelBest responseTypeValidation当前位于一个函数中,该函数在每次按键时都会被调用,并且该函数当前工作正常。调用是self.responseTypeValidation(keyCode)
self.textInput = ko.observable();
self.responseTypeValidation = function (keyCode) {
                oj.Logger.log("input: " +self.textInput());
                if (self.promptMetadata()) {

                    if(self.textInput().match(/[a-z]/))
                    {
                        self.responseErrorMessage("Numbers only");
                    }
                    else {
                       self.responseErrorMessage('');
                    }                      
                }
            };
jobCommand.js:81 Uncaught TypeError: Cannot read property 'match' of undefined
at jobCommandContentViewModel.self.responseTypeValidation (jobCommand.js:81)
at ControllerViewModel.keyDown (jobCommand.js:33)
at HTMLDivElement.<anonymous> (appController.js:60)
at HTMLDivElement.dispatch (jquery-3.1.1.js:5201)
at HTMLDivElement.elemData.handle (jquery-3.1.1.js:5009)


ojcore.js:262 input: h
self.Validation = ko.computed(function () {
    if(self.textInput().match(/[a-z]/))
        self.responseErrorMessage("Numbers only");
    else
        self.responseErrorMessage('');
}, self);
self.textInput.subscribe(function (newValue) {
    if(newValue.match(/[a-z]/))
        self.responseErrorMessage("Numbers only");
    else
        self.responseErrorMessage('');
});