获取KnockoutJS中提交处理程序的事件对象的访问权限

时间:2014-01-14 14:24:50

标签: javascript knockout.js

我已将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());

当我提交表单时,会触发上面的处理程序,但eventundefined。我将上面的代码基于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 jsFiddleeventundefined

问题

  • 如何在提交处理程序中访问event对象?

对于那些想知道为什么我引用了click绑定文档的人,我从submit binding documentation那里指示了以下内容:

  

有关如何将其他参数传递到提交的信息   处理函数,或者在调用时如何控制这个句柄   视图模型上没有的功能,请参阅相关说明   点击绑定。 该页面上的所有注释都适用于提交处理程序   太

2 个答案:

答案 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}"