jQuery .serializeArray()返回空数组

时间:2013-02-15 02:31:03

标签: jquery backbone.js requirejs amd

我正在使用Jquery和骨干来构建我的应用程序。最近我使用require.js在AMD架构中重写项目..然后启动发布表单的问题。这是我的表格:

*<div data-role="page" id="login" data-theme="a">
    <form class="loginPageForm">
        <div data-role="content" style="padding: 15px">
            <h3 id="login_heading">
                Login
            </h3>
            <div data-role="fieldcontain">
                <fieldset data-role="controlgroup" id="email_fieldset">
                    <label for="email_textinput" >
                        Email
                    </label>
                    <input id="email_textinput" placeholder="john@doe.com" value="" type="text" />
                </fieldset>
            </div>
            <div data-role="fieldcontain">
                <fieldset data-role="controlgroup" id="password_fieldset">
                    <label for="password_textinput">
                        Password
                    </label>
                    <input id="password_textinput" placeholder="Secret Password" value="" type="password" />
                </fieldset>
            </div>
            <input type="submit" class="btn" value="Login"/>
            <a data-role="button" data-transition="none" data-theme="f" href="#register" id="registerButton">Register</a>
        </div>
    </form>
</div>*  

我正在使用:

  **$.fn.serializeObject = function(){
            var arrayData, objectData;
            arrayData = $(this).serializeArray();
            objectData = {};
            $.each(arrayData, function() {
                var value;

                if (this.value != null) {
                    value = this.value;
                } else {
                    value = '';
                }

                if (objectData[this.name] != null) {
                    if (!objectData[this.name].push) {
                        objectData[this.name] = [objectData[this.name]];
                    }

                    objectData[this.name].push(value);
                } else {
                    objectData[this.name] = value;
                }
            });

            return objectData;
        }**

用于创建Json ..问题是行$(this).serializeArray();返回一个Empty数组: $(this).serializeArray():Array [0] 长度:0 proto :数组[0]

我的对象“这个”看起来像:

arrayData: Array[0]
objectData: undefined
this: v.fn.v.init[1]
0: form.loginPageForm
0: fieldset#email_fieldset
1: input#email_textinput
2: fieldset#password_fieldset
3: input#password_textinput
4: input.btn

你知道我应该如何避免这个问题,这种形式在我使用AMD架构之前有效吗?

1 个答案:

答案 0 :(得分:13)

您的表单元素没有名称属性。提交表单时,元素的值将以名称作为键发布到服务器。所以名字很重要。

根据jQuery serializeArray Docs

  

.serializeArray()方法使用标准W3C规则来成功控制,以确定它应包含哪些元素;特别是该元素不能被禁用,并且必须包含name属性。没有提交按钮值被序列化,因为表单未使用按钮提交。来自文件选择元素的数据未被序列化。