我已将ViewModel的submitForm
方法绑定到我的form
元素,如下所示:
<form action="#" method="post" data-bind="submit: submitForm">
我的ViewModel如下所示:
function ViewModel() {
this.submitForm = function (data, event) {
console.log(event); //undefined
};
}
ko.applyBindings(new ViewModel());
当我提交表单时,会触发上面的处理程序,但event
为undefined
。我将上面的代码基于documentation,其中说明了以下内容:
注意2:访问事件对象或传递更多参数
在某些情况下,您可能需要访问DOM事件对象 与您的点击事件相关联。淘汰赛将通过该活动 函数的第二个参数,如下例所示:
<button data-bind="click: myFunction">
Click me
</button>
<script type="text/javascript">
var viewModel = {
myFunction: function(data, event) {
if (event.shiftKey) {
//do something different when user has shift key down
} else {
//do normal action
}
}
);
ko.applyBindings(viewModel);
</script>
注意:上面的语法错误是从KnockoutJS示例中逐字复制的。我认为这是一个错误,并且明显的更正应该导致代码按照文档记录。
这段代码示例,以及文档引用,尽我所知,模仿我上面写的内容。但是,as can be seen in this jsFiddle,event
为undefined
。
event
对象?对于那些想知道为什么我引用了click
绑定文档的人,我从submit
binding documentation那里指示了以下内容:
有关如何将其他参数传递到提交的信息 处理函数,或者在调用时如何控制这个句柄 视图模型上没有的功能,请参阅相关说明 点击绑定。 该页面上的所有注释都适用于提交处理程序 太
答案 0 :(得分:5)
In the current implementation您无法获取event
绑定处理程序中的submit
对象。
但是,您可以使用event
binding并手动订阅submit
事件:
<form method="post" action="#" data-bind="event: {'submit': submitForm}">
<input type="submit"/>
</form>
演示JSFiddle。
答案 1 :(得分:2)
来自KnockoutJS submit documentation:
KO将表单元素作为参数传递给提交处理程序 功能
因此,您可能需要使用The "event" binding:
data-bind="event: {submit: submitForm}"