jquery 2.2 serializeArray()适用于Firefox、Chrome,但不适用于IE(11)

jquery 2.2 serializeArray() working in Firefox, Chrome, but not IE(11)

本文关键字:适用于 不适用 IE Firefox serializeArray jquery Chrome      更新时间:2024-01-26

我有一个需要序列化的表单。它在ChromeFireFox中运行良好,但在IE11上根本不起作用。我已经将问题缩小到serializeArray()返回一个空数组。

    JSON.stringify($("#enrollmentForm").find($("fieldset")).eq(0).serializeArray());

我创建了一个jsfiddle,在那里我极大地简化了我的代码和表单,以跟踪问题:https://jsfiddle.net/xu8LpmLr/5/

铬的结果:

IE中的结果:

[]

更新:感谢Rion Williams的回应。我的表单中有多个字段集,我只需要地址信息,所以我修改了代码,只序列化了我需要的字段(我还将zip分为两部分):

var enteredAddressData = function() {
    var data = $("#enrollmentForm").serializeArray().reduce(function(obj, item) {
        var arrayOfAddressElements = ['id','address1','address2','city','state','zip'];
        if (arrayOfAddressElements.indexOf(item.name) >= 0) {
            if (item.name === 'zip') {
                var zipParts = item.value.split('-');
                obj['zip5'] = zipParts[0];
                if (zipParts.length > 1) {
                    obj['zip4'] = zipParts[1];
                } else {
                    obj['zip4'] = '';
                }
            } else {
                obj[item.name] = item.value;
            }
        }
        return obj;
    }, {});
    return { 'address': data };
};

结果:

JSON.stringify(enteredAddressData())

{"address":{"id":"0","address1":"address1value","address 2":"address 2value"

serializeArray()函数的文档明确指出,它只在表单和/或表单控件的jQuery集合上操作,这可能解释了为什么经常"遵循规则"的Internet Explorer可能会拒绝它。

尝试序列化实际的<form>本身,而不是底层的fieldset,这似乎可以按预期工作:

JSON.stringify($("#enrollmentForm").serializeArray())