Po pierwsze: bardzo podoba mi się odpowiedź CMS. Znacznie prostsze. Ale na wypadek, gdyby nie była to najlepsza opcja ...
Dlaczego po prostu nie masz funkcji JQuery powiązanej ze zdarzeniem formularza onsubmit
, które przechodzi przez formularz i pobiera dane wejściowe dla wszystkich <input>
s w formularzu i włącza je i następnie przesyła formularz? Czy musisz wiedzieć, czy wejście jest wyłączone? Czy obawiasz się, że włączenie wejścia zmieni wygląd w sposób, który dotyczy użytkownika?
W obu przypadkach możesz dodać coś do elementów, które włączasz. Aby stylizować, dodaj klasę, która nadaje wyłączonym wejściom taki sam wygląd jak włączone wejścia. Jeśli chcesz wiedzieć, które zostały wyłączone, dodaj coś do nazwy lub samej wartości, aby wskazać status.
Z ciekawości, kiedy chciałbyś wyłączyć wyłączone informacje? Jeśli dane wejściowe są zawsze wyłączone (co oznacza, że użytkownik nie ustawił go w ten sposób), czy nie znasz już wartości? A jeśli wejście jest wyłączone przez użytkownika, czy nie jesteś trochę zwodniczy, zbierając te dane?
Jeśli wartość jest wyłączona, ponieważ jest to coś w rodzaju pola "całkowitego", które aktualizuje się za pomocą js w oparciu o inne niezablokowane pola, wybrałbym CMS zamiast do odczytu.
Na podstawie odpowiedzi na CMS:
mogę sobie tylko wyobrazić kilka scenariuszy, w których select box będzie wyłączone, ale tylko chcesz, które przeszły z powrotem do skryptu. Głównym, który przychodzi mi do głowy jest to, że niektóre pola wyboru stają się aktywne, gdy inne opcje są sprawdzane, ale wolisz, aby formularz przeszedł z powrotem do domyślnego pola wyboru, a nie aby skrypt serwera zajmował się wypełnianiem pustych pól.
Jeśli tak jest, dlaczego nie skonfigurować przełączania między ukrytym wejściem a polem wyboru? Niech wartość i nazwa będą takie same dla obu wejść, ale jeśli jedna jest włączona, druga jest wyłączona. W ten sposób skrypt widzi tylko jedno z dwóch wejść, a ponieważ mają one tę samą nazwę, nie zostaje przyłapany na pochodzeniu danych.
$('form').submit(function() {
$('[disabled]').each(function(i) {
d_name = $(this).attr("name");
d_val = $(this).val();
$(this).after(
'<input type="hidden" name="' + d_name + '" value="' + d_val + ' />'
);
});
return true;
});
tylko w przypadku myślę, że jestem zbyt koncepcyjne, oto prosta funkcja, która będzie działać na użytkownikiem kliknij. Zauważ, jak przechodzi przez każdy wyłączony element i dodaje nowe ukryte wejście do DOM, które ma tę samą nazwę i wartość ma twoje ukryte dane wejściowe, zapewniając, że twój skrypt po stronie serwera może traktować wszystkie dane wejściowe w sposób ogólny.
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. –
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.) –
Cóż, myślę, że to jest martwa rozmowa, ale ktoś ją zignorował , więc przegłosowałem to. –