(更新问题以反映实际问题)
我刚刚意识到serializeArray
没有从禁用的字段中获取内容。
通过从autosuggest
列表中选择项目来填充一组(街道)地址字段。完成此操作后,将禁用这些字段。我可以将其更改为read only
,但我希望禁用外观,而无需更改CSS。
有没有办法让serializeArray
抓取数据,禁用字段?
解决方案
感谢Mohammad,我创建了一个小插件,可以帮助我解决问题:
(Fiddle)
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);
答案 0 :(得分:39)
试试这个
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');
答案 1 :(得分:13)
你可以使用readonly
serializeArray()可以读取它。
答案 2 :(得分:0)
这是预期的行为,不会得到解决。这是一种解决方法
function serializeJSONIncludingDisabledFields (form) {
var fields = form.find('[disabled]');
fields.prop('disabled', false);
var json = form.serializeJSON();
fields.prop('disabled', true);
return json;
}
链接到issue
答案 3 :(得分:-1)
$('#field').removeAttr('disabled');
var formData = $(this).serializeArray();
$('#field').attr('disabled', 'disabled');
上面的解决方案更好 - 或者你可以从元素中删除disabled属性,序列化字段然后重新添加属性。