2009-08-16 17 views
31

Wiem, że zdefiniowane zachowanie dla formularzy internetowych nie jest przesyłaniem wyłączonych pól ... ale to nie jest definicja, której chcę. Chcę użyć ajax, aby opublikować formularz i chcę, aby uzyskać wszystkie pola, nawet jeśli są wyłączone. Nie chcę budować obejścia, w którym sprawię, że pole będzie wyglądało "wyłączone" ... lub trzeba je zhackować, gdy włączę pola -> post -> wyłącz.przesłać wyłączone pola

jest to możliwe, aby ajaxSubmit() lub serializować() złapać wyłączone pola, jak porusza się przez DOM i chwytając wartości? czy jest tam inna serializująca wtyczka, która może to zrobić? lub czy ktoś ma mod, który mogę wprowadzić do jednej z tych wtyczek, aby to działało?

czy jestem skazany na zhackowanie?

+2

Wyjaśnić serię zdarzeń, które mają użytkownikowi doświadczyć , wtedy możemy pomóc ci znaleźć rozwiązanie. W tej historii musi być coś jeszcze, poza tym nie ma powodu, aby używać pola wyboru, jeśli zostanie ono wyłączone. –

+2

Oto jeden z powodów, dla których chcieliśmy tę funkcjonalność (w innym projekcie niezwiązanym z OP). Mamy stronę AJAXed, która ładuje dostępne opcje dynamicznie. W niektórych przypadkach, gdy nie można wybrać różnych opcji, wybieramy jedną i wyłączamy kontrolę. To musi być wysłane z powrotem na serwer, ponieważ potrzebujemy tego ustawienia. (Tak, teoretycznie, moglibyśmy zorientować się, jaka będzie wartość na zapleczu, ale ponieważ logika została już wykonana, nie ma potrzeby komplikowania.) –

+0

Cóż, myślę, że to jest martwa rozmowa, ale ktoś ją zignorował , więc przegłosowałem to. –

Odpowiedz

33

Możesz tworzyć swoje pola readonly, to uniemożliwi zmiany wartości kontrolek.

Edit: Można łatwo napisać „serializeDisabled” funkcji, iteracja ciągu niepełnosprawnych elementów formularzy, które mają atrybut nazwy i za pomocą funkcji jQuery.param na końcu, aby wygenerować zserializowaną ciąg:

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

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

nie można zrobić z pola