150 votes

Comment faire $.serialize() de prendre en compte les personnes handicapées :les entrées des éléments?

Semble désactivée par défaut des éléments d'entrée sont ignorés par $.serialize(),

est-il un travail?

255voto

user113716 Points 143363

Activer temporairement.

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');

105voto

Andrew Points 1925

Que penser de l'utilisation en lecture seule entrées au lieu de désactivé les entrées?

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

Cela devrait obtenir ramassé par la fonction serialize().

15voto

Krzysiek Points 1064

Vous pouvez utiliser le proxy de la fonction:

(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);

5voto

KennyKam Points 21

essayez ceci

<input type="checkbox" name="_key" value="value"  disabled="" />
<input type="hidden" name="key" value="value"/>

3voto

Jason Lewis Points 921

Désactivé éléments d'entrée ne pas être sérialisé parce que "désactivé" signifie qu'ils ne doivent pas être utilisés, par standard du W3C. jQuery est juste de respecter la norme, même si certains navigateurs ne le font pas. Vous pouvez contourner ce problème, par l'ajout d'un champ caché avec une valeur identique au champ désactivé, ou en faisant cela, via jQuery, quelque chose comme ceci:

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

Évidemment, si vous avez eu plus d'une entrée bloquée, vous devez effectuer une itération sur l'appariement des sélecteurs, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X