Как сделать так, чтобы $.serialize() учитывал отключенные элементы input?

Кажется, по умолчанию отключенные элементы ввода игнорируются $.serialize(). Есть ли обходной путь?

120
20 янв. '11 в 18:01
источник поделиться
9 ответов

Временно включите их.

var myform = $('#myform');

 // Find disabled inputs, and remove the "disabled" attribute
var disabled = myform.find(':input:disabled').removeAttr('disabled');

 // serialize the form
var serialized = myform.serialize();

 // re-disabled the set of inputs that you previously enabled
disabled.attr('disabled','disabled');
204
20 янв. '11 в 18:08
источник

Связанные вопросы


Похожие вопросы

Используйте входы только для чтения вместо отключенных входов:

<input name='hello_world' type='text' value='hello world' readonly />

Это должно быть получено с помощью serialize().

85
14 марта '13 в 1:49
источник

Вы можете использовать функцию с прокси (она влияет как на $.serializeArray() и на $.serialize()):

(function($){
    var proxy = $.fn.serializeArray;
    $.fn.serializeArray = function(){
        var inputs = this.find(':disabled');
        inputs.prop('disabled', false);
        var serialized = proxy.apply( this, arguments );
        inputs.prop('disabled', true);
        return serialized;
    };
})(jQuery);
7
04 сент. '13 в 13:42
источник

@user113716 предоставил основной ответ. Мой вклад здесь - это просто jQuery, добавив в него функцию:

/**
 * Alternative method to serialize a form with disabled inputs
 */
$.fn.serializeIncludeDisabled = function () {
    let disabled = this.find(":input:disabled").removeAttr("disabled");
    let serialized = this.serialize();
    disabled.attr("disabled", "disabled");
    return serialized;
};

Пример использования:

$("form").serializeIncludeDisabled();
6
17 авг. '17 в 20:19
источник

Отключенные элементы ввода не сериализуются, потому что "отключено" означает, что они не должны использоваться по стандарту W3C. jQuery просто соблюдает стандарт, хотя некоторые браузеры этого не делают. Вы можете обойти это, добавив скрытое поле со значением, идентичным отключенному полю, или сделав это через jQuery, примерно так:

$('#myform').submit(function() {
  $(this).children('input[hiddeninputname]').val($(this).children('input:disabled').val());
  $.post($(this).attr('url'), $(this).serialize, null, 'html');
});

Очевидно, что если у вас было несколько отключенных входных данных, вам пришлось бы перебирать соответствующие селектора и т.д.

1
20 янв. '11 в 18:21
источник

В случае, если кто-то не хочет активировать их, а затем отключить их снова, вы также можете попытаться сделать это (я изменил его из отключенных полей, не выбранных serializeArray, от использования плагина к использованию обычной функции):

function getcomment(item)
{
  var data = $(item).serializeArray();
  $(':disabled[name]',item).each(function(){
    data.push({name: item.name,value: $(item).val()});
  });
  return data;
}

Таким образом, вы можете назвать их так:

getcomment("#formsp .disabledfield");
1
28 марта '18 в 5:45
источник

Я вижу несколько обходных решений, но никто не предложил написать собственную функцию сериализации. Вот вы: https://jsfiddle.net/Lnag9kbc/

var data = [];

// here, we will find all inputs (including textareas, selects etc)
// to find just disabled, add ":disabled" to find()
$("#myform").find(':input').each(function(){
    var name = $(this).attr('name');
    var val = $(this).val();
    //is name defined?
    if(typeof name !== typeof undefined && name !== false && typeof val !== typeof undefined)
    {
        //checkboxes needs to be checked:
        if( !$(this).is("input[type=checkbox]") || $(this).prop('checked'))
            data += (data==""?"":"&")+encodeURIComponent(name)+"="+encodeURIComponent(val);
    }
});
1
22 окт. '15 в 11:35
источник

Попробуй это:

<input type="checkbox" name="_key" value="value"  disabled="" />
<input type="hidden" name="key" value="value"/>
1
17 окт. '14 в 10:17
источник

Прямо над Аароном Худоном:

Может быть, у вас есть что-то, кроме ввода (например, выберите), поэтому я изменил

this.find(":input:disabled")

в

this.find(":disabled")
0
06 февр. '19 в 16:15
источник

Посмотрите другие вопросы по меткам или Задайте вопрос