Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Knockout.js:如何获取当前表单?_Javascript_Jquery_Knockout.js - Fatal编程技术网

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

Javascript Knockout.js:如何获取当前表单?,javascript,jquery,knockout.js,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

我是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>

您在代码中正确地引用了当前表单:它作为第一个参数传递给
submit
数据绑定处理程序,但是,
jQuery.serialize()
方法只能序列化具有
name
属性的
input
。将
name
属性添加到您的字段中,它就会起作用

来自(粗体是我的)

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


但是,我建议您在注释中遵循@James Thorpe的建议,从Knockout.js observates中获取表单值。

这听起来像是一个问题-当数据应该都已经存在于Knockout viewmodel中时,为什么要序列化表单?您的最终目标是什么?我正在使用一个PHP框架发布序列化表单。然后在服务器ajax方法上自动重新创建序列化表单。这就是为什么我想序列化当前表单,而不是直接访问viewmodel。你说得对。这是一个jquery问题,而不是KO问题。
$(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());
});