I valori degli input disabilitati non verranno inviati


Risposte:


189

Sì, tutti i browser non devono inviare gli input disabilitati, poiché sono di sola lettura.

Ulteriori informazioni (sezione 17.12.1)

Definizioni degli attributi

disabled [CI] Se impostato per un controllo modulo, questo attributo booleano disabilita il controllo per l'input dell'utente. Se impostato, l'attributo disabilitato ha i seguenti effetti su un elemento:

  • I controlli disabilitati non ricevono lo stato attivo.
  • I controlli disabilitati vengono ignorati nella navigazione delle schede.
  • I controlli disabilitati non possono avere successo.

I seguenti elementi supportano l'attributo disabilitato: BUTTON, INPUT, OPTGROUP, OPTION, SELECT e TEXTAREA.

Questo attributo è ereditato ma le dichiarazioni locali hanno la precedenza sul valore ereditato.

La modalità di rendering degli elementi disabilitati dipende dal programma utente. Ad esempio, alcuni agenti utente "disattivano" le voci di menu disabilitate, le etichette dei pulsanti, ecc.

In questo esempio, l'elemento INPUT è disabilitato. Pertanto, non può ricevere input dell'utente né il suo valore verrà inviato con il modulo.

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

Nota. L'unico modo per modificare dinamicamente il valore dell'attributo disabilitato è tramite uno script.


86
Soluzione alternativa: aggiungere un <input type="hidden">elemento con lo stesso nome / valore dell'input disabilitato.
John Kugelman,

qualche informazione su quale browser fa e a cui non obbedisce?
Allisone,

82
usa readonly = "readonly" invece :) vedi stackoverflow.com/questions/7357256/…
Adrien Be

1
@ Allisone: Firefox e Chrome sembrano obbedire a questo (gli input disabilitati NON vengono inviati). Non ho provato su altri browser.
Adrien,

1
@JohnKugelman perché lo stesso nome? il disabile non verrà comunque inviato .. può anche dare il vero nome a quello nascosto e usarne uno diverso per il disabile
Arth

286

disabled l'input non invierà i dati.

Usa l' readonlyattributo:

<input type="text" readonly />

Fonte qui


@FrankFang, Ok, ma, quando passo i dati al modello di blade del collettivo Laravel. Non funzionerà non è possibile inviare dati in questo modo.
ssi-anik,

@ ssi-anik readonlyfunziona, assicurati solo di passare "name" attr all'input.
BenNov,

26

Puoi usare tre cose per imitare i disabili:

  1. HTML: readonlyattributo (in modo che il valore presente nell'input possa essere utilizzato all'invio del modulo. Inoltre l'utente non può modificare il valore di input)

  2. CSS: 'pointer-events':'none'(impedendo all'utente di fare clic sull'input)

  3. HTML: tabindex="-1"(bloccando l'utente per navigare verso l'input dalla tastiera)


22

Non vengono inviati, perché è quello che dice nelle specifiche del W3C .

17.13.2 Controlli riusciti

Un controllo riuscito è "valido" per l'invio. [Omissis]

  • I controlli disabilitati non possono avere esito positivo.

In altre parole, la specifica afferma che i controlli disabilitati sono considerati non validi e non devono essere inviati.


2

Disabledi controlli non possono avere esito positivo e un controllo riuscito è "valido" per l'invio. Questo è il motivo per cui i controlli disabilitati non vengono inviati con il modulo.


1

Esistono due attributi, vale a dire readonlye disabled, che possono fornire un input di sola lettura. Ma c'è una piccola differenza tra loro.

<input type="text" readonly />
<input type="text" disabled />
  • L' readonlyattributo rende il testo di input disabilitato e gli utenti non possono più modificarlo.
  • L' disabledattributo non solo renderà il tuo testo di input disabilitato (immutabile), ma non potrà nemmeno essere inviato .

Approccio jQuery (1):

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

Approccio jQuery (2):

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

Approccio JavaScript:

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

PS disablede readonlysono attributi html standard. propintrodotto con jQuery 1.6.


0

i controlli di selezione sono ancora selezionabili anche con attributo di sola lettura

se si desidera disabilitare ancora il controllo ma si desidera che venga pubblicato il suo valore. Potresti prendere in considerazione la creazione di un campo nascosto. con lo stesso valore del tuo controllo.

quindi crea un jquery, su select change

$('#your_select_id').change(function () {
    $('#your_hidden_selectid').val($('#your_select_id').val());
});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.