将Javascript onkeypress转换为knockoutjs以调用enter

将Javascript onkeypress转换为knockoutjs以调用enter,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我正试图在KnockoutJS中尽我所能,但我很难将其转换为KnockoutJS 我有一个输入框,按enter键时需要调用addInputName()。我认为这是一种老派的做法。有没有办法在淘汰赛中做到这一点 <input id="inputName" onkeypress="addInputName(this, event);" /> <input id="addInputName" type="button" data-bind="event: { click: addIn

我正试图在KnockoutJS中尽我所能,但我很难将其转换为KnockoutJS

我有一个输入框,按enter键时需要调用addInputName()。我认为这是一种老派的做法。有没有办法在淘汰赛中做到这一点

<input id="inputName" onkeypress="addInputName(this, event);" />
<input id="addInputName" type="button" data-bind="event: { click: addInputName }" value="Add" />


self.addInputName = function (inputElement, event) {
    if (event.keyCode == 13) { 
        $('#addInputName').click();
    }
};

self.addInputName=函数(inputElement,事件){
如果(event.keyCode==13){
$('#addInputName')。单击();
}
};
//查看
//视图模型
函数ViewModel(){
var self=这个;
self.name=ko.observable();
self.names=ko.observearray();
self.addInputName=函数(){
self.names.push(self.name());
姓名(“”);
};
}
//定制装订
ko.bindingHandlers.enterKey={
init:函数(元素、valueAccessor、所有绑定、数据、上下文){
var wrapper=函数(数据、事件){
如果(event.keyCode===13){
valueAccessor().调用(此、数据、事件);
}
};
applybindingstoode(元素,{event:{keyup:wrapper}},上下文);
}
};
@20:05


调查。它是一个非常有用的工具,可以帮助您将UI逻辑从ViewModel的业务逻辑中提取出来。

为什么不将输入打包到表单中呢?然后您可以将HTML更改为

<form data-bind="submit: addInputName">
    <input id="inputName" type="text" data-bind="value: name" />
    <input id="addInputName" type="submit" value="Submit" />
</form>

是的,如果浏览器愿意为您做一些工作(比如在表单字段中识别enter键),那么让它这样做而不是自己复制它几乎总是一个好主意。要编写的代码更少,出错的代码也更少。这是一个关于将表单提交与knockout.js相结合的问题的好答案;但是,问题是如何将名称添加到名称列表中,而不是如何提交表单数据。
addInputName
按钮不是提交按钮,而是将该
inputName
添加到名称列表的事件。如何处理提交由您决定。即使使用KO的
submit
绑定,也会禁用默认表单提交,除非
addInputName
返回
true
。请查看此plunker:
<form data-bind="submit: addInputName">
    <input id="inputName" type="text" data-bind="value: name" />
    <input id="addInputName" type="submit" value="Submit" />
</form>
var ViewModel = function()
{
    var self = this;
    self.name = ko.observable();
    self.addInputName = function() {
        // do stuff
    }   
}