2013-04-11 9 views
12

(domanda aggiornato per riflettere il vero problema)campi disabili non raccolti da serializeArray

Ho appena realizzato che serializeArray non è il recupero di contenuti dai campi disabili.

Un insieme di campi di indirizzi (stradali) viene popolato selezionando un elemento da un elenco autosuggest. Una volta fatto, i campi sono disabilitati. Potrei cambiare questo a read only, ma voglio l'aspetto disabilitato senza dover cambiare CSS.

C'è un modo per avere i dati di prelievo serializeArray, i campi disabilitati?

Soluzione

Grazie a Mohammad, ho creato un piccolo plugin che mi aiuta a risolvere il mio problema:

(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

hai attributo nome nell'elemento dinamico aggiunto –

+0

Sì. Tutti i campi di input che devono essere submitte4d hanno l'attributo name. Oh, una nota importante, i campi sono disabilitati! (scusate - aggiornerò Q) – Steven

+0

Questo è il motivo per cui serializeArray non sceglie quegli elementi –

risposta

26

Prova questa

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

Ed ecco il piccolo plugin che viene utilizzato

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

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

Si può anche provare ad abilitare del tutto vostro elemento proprio per serializzare loro e poi li disattiva dopo la serializzazione.

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

Ciò che renderebbe davvero la giornata, è stato se spostassi il 'serializeArray' all'interno del nuovo plugin e concatenato i dati lì. Quindi tutto ciò che dovevo fare era 'data = $ ('form'). SerializeAllArray()'. – Steven

+0

ora puoi usare '.serializeAllArray()' come vuoi –

+0

Grazie Mohammad. Ho fatto una versione migliorata qui: http://jsfiddle.net/gARuJ/ – Steven

9

è possibile utilizzare readonly serializeArray() può leggerlo.

+0

Sfortunatamente 'readonly' non funziona sui campi , quindi questa è solo un'opzione per gli input e le aree di testo. – sp00n

Problemi correlati