2009-08-31 22 views
134

To jest to, co znalazłem przez fireBug w firefox.wartości wyłączonych wejść nie zostaną przesłane?

Czy to samo dzieje się w innych przeglądarkach?

Jeśli tak, jaki jest tego powód?

+17

Można ustawić atrybut "tylko do odczytu". Chrome na przykład renderuje to jako wyłączone pole, ale przesyła je. – peterrus

+4

Możliwy duplikat [Wyłączone dane wejściowe formularza nie pojawiają się w żądaniu] (http://stackoverflow.com/questions/7357256/disabled-form-inputs-do-not-appear-in--request) – hazzik

Odpowiedz

129

Tak, wszystkie przeglądarki nie powinny nie powinny przekazywać wyłączonych wejść, ponieważ są one tylko do odczytu.

More info (rozdział 17.12.1)

definicji atrybutów

wyłączone [CI] Kiedy zestaw do kontrolnej postaci, Ta wartość atrybutu wyłącza sterowanie wprowadzania. Po ustawieniu wyłączony atrybut ma następujący wpływ na element:

  • Wyłączone elementy sterujące nie są ogniskowane.
  • Wyłączone elementy sterujące są pomijane podczas nawigacji w kartach.
  • Wyłączone elementy sterujące nie mogą się powieść.

Następujące elementy obsługują atrybut disabled: BUTTON, INPUT, OPTGROUP, OPTION, SELECT i TEXTAREA.

Ten atrybut jest dziedziczony, ale lokalne deklaracje zastępują odziedziczoną wartość .

Sposób renderowania wyłączonych elementów zależy od agenta użytkownika. W przypadku przykładu, niektóre programy klienckie "wyszarzają" wyłączone elementy menu, etykiety itd.

W tym przykładzie element INPUT jest wyłączony. W związku z tym użytkownik nie może odbierać danych wejściowych od użytkownika ani przesyłać jego wartości za pomocą formularza.

<INPUT disabled name="fred" value="stone"> 

Uwaga. Jedynym sposobem dynamicznego modyfikowania wartości wyłączonego atrybutu jest użycie skryptu.

+59

Obejście: dodaj element '' o tej samej nazwie/wartości co wyłączone wejście. –

+0

wszelkie informacje o tym, która przeglądarka działa i której nie przestrzega? – Allisone

+2

@JohnKugelman dobry pomysł, ale upewnij się, że przypadkowo nie dodajesz ukrytych atrybutów. Zrobiłem to: $ ('# thingy'). Val (nieważne) .not ('[type = hidden]'). Attr ("wyłączony", "wyłączony") –

17

Nie zostaną przesłane, ponieważ that's what it says in the W3C spec.

17.13.2 Skuteczne kontrole

Skuteczna kontrola jest "ważna" dla złożenia. [wycinanie]

  • Kontrolki, które są wyłączone, nie mogą się powieść.

Innymi słowy, specyfikacja mówi, że wyłączone elementy sterowania są uważane za nieważne i nie należy ich przesyłać.

178

disabled dane wejściowe nie będą przesyłane.

Użyj atrybutu readonly:

<input type="text" readonly /> 

Source here

+11

ale to nie działa w przypadku tagów select! – shareef

+0

@shareef http://jsbin.com/diloha/1/ Co powiesz na to? –

+0

@FrankFang, Ok, ale, kiedy przekazuję dane do szablonu ostrza zbiorowego Laravel. To nie zadziała. nie można wysyłać danych w ten sposób. –

1

Disabled kontrole nie mogą odnieść sukces, a sukces sterowania jest "ważna" dla złożenia. Jest to powód, dla którego wyłączone elementy sterujące nie są przesyłane za pomocą formularza.