2013-04-11 10 views
12

(Frage aktualisiert echtes Problem zu reflektieren)Behinderte Felder nicht durch serializeArray abgeholt

Ich habe erkannt, dass serializeArray keine Inhalte von behinderten Feldern zu holen ist.

Eine Gruppe von (Straßen-) Adressfeldern wird ausgefüllt, indem ein Element aus einer autosuggest Liste ausgewählt wird. Sobald dies erledigt ist, sind die Felder deaktiviert. Ich könnte dies zu read only ändern, aber ich möchte das deaktivierte Aussehen und Gefühl, ohne CSS zu ändern.

Gibt es eine Möglichkeit serializeArray Daten von den deaktivierten Feldern zu erhalten?

Lösung

Dank Mohammad, habe ich ein kleines Plugin, das ich mein Problem zu lösen hilft:

(Fiddle) diesen

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

Haben Sie ein Namensattribut in Ihrem dynamisch hinzugefügten Element –

+0

Ja. Alle Eingabefelder, die submitte4d sein müssen, haben das Namensattribut. Oh, eine wichtige Anmerkung, die Felder sind deaktiviert! (tut mir leid - ich werde Q aktualisieren) – Steven

+0

Das ist der Grund, warum serializeArray die Elemente dieses Elements nicht auswählt. –

Antwort

26

Versuchen

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

Und hier ist das kleine Plugin das heißt

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

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

verwenden Sie können auch versuchen, damit alle Ihre Elemente nur sie serialisiert und dann deaktivieren, nachdem die Serialisierung.

var myform = $('#form'); 
var disabled = myform.find(':input:disabled').removeAttr('disabled'); 
var serialized = myform.serializeArray(); 
disabled.attr('disabled','disabled'); 
+0

Was würde wirklich den Tag machen, wenn Sie das 'serializeArray' in das neue Plugin verschoben haben und die Daten dort zusammengestellt. Dann brauche ich nur noch "data = $ ('form'). SerializeAllArray()'. – Steven

+0

jetzt können Sie '.serializeAllArray()' verwenden, wie Sie wollten –

+0

Dank Mohammad. Ich habe eine verbesserte Version hier gemacht: http://jsfiddle.net/gARuJ/ – Steven

9

können Sie verwenden readonly serializeArray() gelesen werden kann.

+0

Leider funktioniert 'readonly' nicht auf