Knockout.js:如何获取当前表单?

时间:2015-09-21 13:52:20

标签: javascript jquery knockout.js

我是KnockoutJS的新手,我想序列化当前的表单,但是当我在console.log中序列化表单时,它是空的。

如何参考当前表单?

这是我的DOM:

<form data-bind="submit: onSubmit">
  <input type="text" data-bind="value: firstName">
  <input type="text" data-bind="value: lastName">
  <button data-bind="click: capitalizeLastName">Go caps</button>
  <input type="submit" value="submit">
</form>

这里是JS代码:

$(document).ready(function () {
    function AppViewModel() {
        var self = this;
        self.firstName = ko.observable("Bert");
        self.lastName = ko.observable("Bertington");
        self.fullName = ko.computed(function() {
            return self.firstName() + " " + self.lastName();
        }, self);
        self.capitalizeLastName = function() {
            var currentVal = self.lastName();        // Read the current value
            self.lastName(currentVal.toUpperCase()); // Write back a modified value
        };

        self.onSubmit = function(form) {
//            alert( self.firstName()) ;
            console.log($(form).serialize()) ;
        }
    }

    // Activates knockout.js
    ko.applyBindings(new AppViewModel());
});

1 个答案:

答案 0 :(得分:1)

您正确引用代码中的当前表单:它作为第一个参数传递给submit数据绑定处理程序,但只有input具有name属性的按jQuery.serialize()方法序列化。将<{1}}属性添加到您的字段中即可。

来自https://api.jquery.com/serialize/(大胆是我的)

  

注意:只有“成功控件”被序列化为字符串。没有   由于表单未提交,因此提交按钮值已序列化   使用按钮。 表单元素的值包含在   序列化字符串,该元素必须具有名称属性。价值来自   复选框和单选按钮(“radio”或“checkbox”类型的输入)   仅在检查时才包括在内。来自文件选择元素的数据   没有序列化。

但是,我建议您在评论中关注@James Thorpe建议,并从Knockout.js observables获取表单值。