2013-04-11 12 views
12

(pytanie zaktualizowane, aby odzwierciedlić rzeczywisty problem)Pola niepełnosprawnych nie odebrany przez serializeArray

zdałem sobie sprawę, że nie jest serializeArray pobierania treści z dziedzin niepełnosprawnych.

Zestaw (ulica) pól adresowych są wypełniane przez wybranie pozycji z listy autosuggest. Po wykonaniu tej czynności pola są wyłączone. Mogę to zmienić na read only, ale chcę mieć wyłączony wygląd i styl bez konieczności zmiany CSS.

Czy istnieje sposób, aby mieć serializeArray dane zgarnij powrotem, pola niepełnosprawne?

Rozwiązanie

Dzięki Mohammad, stworzyłem małą wtyczkę, która pomaga mi rozwiązać mój problem:

(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

masz atrybut nazwy w dynamicznie dodawane elementu –

+0

Tak. Wszystkie pola wejściowe, które muszą być submitte4d, mają atrybut name. Och, jedna ważna uwaga, pola są wyłączone! (Przepraszam - Będę aktualizować Q) – Steven

+0

To jest powód, dlaczego serializeArray nie odbiera tych, elementu –

Odpowiedz

26

Spróbuj

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

A oto mała wtyczka jest używany

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

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

Możesz również spróbować włączyć wszystkie elementy, aby je przekształcić do postaci szeregowej, a następnie wyłączyć je po serializacji.

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

Co naprawdę uczyniłoby ten dzień, gdyby przeniesiono 'serializeArray' wewnątrz nowej wtyczki i zawarłem tam dane. Następnie wszystko, co musiałem zrobić, to 'dane = $ (" formularz "). SerializeAllArray()'. – Steven

+0

teraz można użyć '.serializeAllArray()' jak chciałeś –

+0

Dzięki Mohammad. Zrobiłem ulepszoną wersję tutaj: http://jsfiddle.net/gARuJ/ – Steven

9

można użyć readonly serializeArray() może go odczytać.

+0

Niestety "tylko do odczytu" nie działa na polach , więc jest to tylko opcja dla wejść i tekstów. – sp00n

Powiązane problemy