Wartości wyłączonych wejść nie będą przesyłane

Odpowiedzi:

189

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

Więcej informacji (sekcja 17.12.1)

Definicje atrybutów

disabled [CI] Po ustawieniu dla kontrolki formularza ten atrybut logiczny wyłącza kontrolę dla wprowadzania danych przez użytkownika. Po ustawieniu wyłączony atrybut ma następujące działanie na element:

  • Wyłączone elementy sterujące nie są aktywowane.
  • Wyłączone elementy sterujące są pomijane w nawigacji po kartach.
  • Wyłączone elementy sterujące nie mogą zakończyć się powodzeniem.

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

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

Sposób renderowania wyłączonych elementów zależy od klienta użytkownika. Na przykład niektóre aplikacje użytkownika „wyszarzają” wyłączone elementy menu, etykiety przycisków itp.

W tym przykładzie element INPUT jest wyłączony. Dlatego nie może otrzymać danych wejściowych od użytkownika, a jego wartość nie zostanie przesłana z formularzem.

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

Uwaga. Jedynym sposobem na dynamiczną modyfikację wartości wyłączonego atrybutu jest skrypt.

Aziz
źródło
86
Obejście: dodaj <input type="hidden">element o tej samej nazwie / wartości, co wyłączone wejście.
John Kugelman,
jakieś informacje o tym, która przeglądarka działa, a która nie jest posłuszna?
Allisone
82
zamiast tego użyj readonly = "readonly" :) patrz stackoverflow.com/questions/7357256/…
Adrien Be
1
@Allisone: Firefox i Chrome wydają się tego przestrzegać (wyłączone dane wejściowe NIE są przesyłane). Nie próbowałem w innych przeglądarkach.
Adrien Be
1
@JohnKugelman, dlaczego ta sama nazwa? niepełnosprawny i tak nie zostanie zgłoszony .. równie dobrze może nadać prawdziwe imię ukrytemu i użyć innego dla niepełnosprawnego
Arth
286

disabled dane wejściowe nie będą przesyłać danych.

Użyj readonlyatrybutu:

<input type="text" readonly />

Źródło tutaj

Fred K.
źródło
@FrankFang, Ok, ale kiedy przesyłam dane do szablonu ostrza kolektywu Laravel. To nie zadziała. nie może wysyłać danych w ten sposób.
ssi-anik
@ ssi-anik readonlydziała, tylko upewnij się, że przekazujesz „name” attr do danych wejściowych.
BenNov
26

Możesz naśladować wyłączone trzy rzeczy:

  1. HTML: readonlyatrybut (aby wartość obecna w danych wejściowych mogła zostać wykorzystana przy wysyłaniu formularza. Użytkownik nie może również zmienić wartości wejściowej)

  2. CSS: 'pointer-events':'none'(blokuje użytkownikowi kliknięcie wejścia)

  3. HTML: tabindex="-1"(blokuje użytkownikowi przejście do wejścia z klawiatury)

Nowicjusz_JS
źródło
22

Nie są przesyłane, ponieważ tak mówi specyfikacja W3C .

17.13.2 Skuteczne kontrole

Pomyślna kontrola jest „ważna” do złożenia. [fantastyczna okazja]

  • Wyłączone elementy sterujące nie mogą zakończyć się powodzeniem.

Innymi słowy, specyfikacja mówi, że wyłączone formanty są uważane za nieprawidłowe i nie należy ich przesyłać.

MiffTheFox
źródło
2

Disabledkontrole nie mogą zakończyć się powodzeniem, a pomyślna kontrola jest „ważna” do przesłania. Z tego powodu wyłączone formanty nie przesyłają formularza.

Juan de Parras
źródło
1

Istnieją dwa atrybuty, a mianowicie readonlyi disabled, które mogą stanowić dane tylko do odczytu. Ale jest między nimi niewielka różnica.

<input type="text" readonly />
<input type="text" disabled />
  • readonlyCecha sprawia, że tekst wejście wyłączone, a użytkownicy nie są w stanie zmienić go już.
  • disabledAtrybut nie tylko spowoduje wyłączenie tekstu wejściowego (niezmiennego), ale również nie będzie można go przesłać .

Podejście jQuery (1):

$("#inputID").prop("readonly", true);
$("#inputID").prop("disabled", true);

Podejście jQuery (2):

$("#inputID").attr("readonly","readonly");
$("#inputID").attr("disabled", "disabled");

Podejście JavaScript:

document.getElementById("inputID").readOnly = true;
document.getElementById("inputID").disabled = true;

PS disabledi readonlysą standardowymi atrybutami HTML. propwprowadzono z jQuery 1.6.

Elyas Hadizadeh
źródło
0

wybrane elementy sterujące są nadal klikalne, nawet na atrybutach tylko do odczytu

jeśli nadal chcesz wyłączyć kontrolę, ale chcesz opublikować jej wartość. Możesz rozważyć utworzenie ukrytego pola. o tej samej wartości, co twoja kontrola.

następnie utwórz jquery, po wybraniu zmiany

$('#your_select_id').change(function () {
    $('#your_hidden_selectid').val($('#your_select_id').val());
});
Johnine
źródło