jQuery .serializeArray() 返回空数组。

6

我正在使用Jquery和backbone构建我的应用程序。最近,我使用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();返回一个空数组:

$(this).serializeArray():Array[0]

length: 0

proto: Array[0]

我的对象"this"看起来像:

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
确实,那很可能是因为您没有为您的字段命名。只会处理有名称的字段。 - MatRt
1个回答

16

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

根据jQuery serializeArray文档

.serializeArray()方法使用标准的W3C规则来确定应包含哪些元素; 特别是该元素不能被禁用,并且必须包含一个名称属性。由于表单不是使用按钮提交的,因此不会序列化提交按钮的值。文件选择元素中的数据不会被序列化。


嗨,SybariteManoj,谢谢你的回答,这个可行... - stef
天啊,真不敢相信就是这样:p 感谢你的速成课程! - Stan Smulders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接