30

(问题已更新以反映实际问题)

我刚刚意识到这serializeArray不是从禁用字段中获取内容。

autosuggest通过从列表中选择一个项目来填充一组(街道)地址字段。完成此操作后,这些字段将被禁用。我可以将其更改为read only,但我想要禁用的外观而无需更改 CSS。

有没有办法serializeArray从禁用的字段中获取数据?

解决方案

感谢 Mohammad,我创建了一个小插件来帮助我解决我的问题:

小提琴

    var form_data = $('form').serializeAll();

    (function ($) {
      $.fn.serializeAll = function () {
        var data = $(this).serializeArray();

        $(':disabled[name]', this).each(function () { 
            data.push({ name: this.name, value: $(this).val() });
        });

        return data;
      }
    })(jQuery);
4

4 回答 4

60

尝试这个

var data = $('form').serializeAllArray();

这是使用的小插件

(function ($) {
  $.fn.serializeAllArray = function () {
    var obj = {};

    $('input',this).each(function () { 
        obj[this.name] = $(this).val(); 
    });
    return $.param(obj);
  }
})(jQuery);

您也可以尝试启用所有元素来序列化它们,然后在序列化后禁用它们。

var myform = $('#form');
var disabled = myform.find(':input:disabled').removeAttr('disabled');
var serialized = myform.serializeArray();
disabled.attr('disabled','disabled');
于 2013-04-11T21:09:15.907 回答
19

您可以使用readonly serializeArray() 可以读取它。

于 2016-06-22T04:00:32.393 回答
0

这是预期的行为,不会被修复。这是一个解决方法

function serializeJSONIncludingDisabledFields (form) {
  var fields = form.find('[disabled]');
  fields.prop('disabled', false);
  var json = form.serializeJSON();
  fields.prop('disabled', true);
  return json;
}

链接到问题

于 2020-11-30T06:29:36.153 回答
-1
$('#field').removeAttr('disabled');
var formData = $(this).serializeArray();
$('#field').attr('disabled', 'disabled');

上面的解决方案更好 - 或者您可以从元素中删除 disabled 属性,序列化字段然后重新添加属性。

于 2018-04-27T09:01:21.650 回答