我是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());
});
答案 0 :(得分:1)
您正确引用代码中的当前表单:它作为第一个参数传递给submit
数据绑定处理程序,但只有input
具有name
属性的按jQuery.serialize()
方法序列化。将<{1}}属性添加到您的字段中即可。
来自https://api.jquery.com/serialize/(大胆是我的)
注意:只有“成功控件”被序列化为字符串。没有 由于表单未提交,因此提交按钮值已序列化 使用按钮。 表单元素的值包含在 序列化字符串,该元素必须具有名称属性。价值来自 复选框和单选按钮(“radio”或“checkbox”类型的输入) 仅在检查时才包括在内。来自文件选择元素的数据 没有序列化。
但是,我建议您在评论中关注@James Thorpe建议,并从Knockout.js observables获取表单值。