Los valores de las entradas deshabilitadas no se enviarán

Respuestas:

189

Sí, todos los navegadores no deben enviar las entradas deshabilitadas, ya que son de solo lectura.

Más información (sección 17.12.1)

Definiciones de atributos

disabled [CI] Cuando se establece para un control de formulario, este atributo booleano deshabilita el control para la entrada del usuario. Cuando se establece, el atributo deshabilitado tiene los siguientes efectos en un elemento:

  • Los controles deshabilitados no reciben foco.
  • Los controles deshabilitados se omiten en la navegación con pestañas.
  • Los controles deshabilitados no pueden tener éxito.

Los siguientes elementos admiten el atributo deshabilitado: BOTÓN, ENTRADA, OPTGROUP, OPTION, SELECT y TEXTAREA.

Este atributo se hereda, pero las declaraciones locales anulan el valor heredado.

Cómo se representan los elementos deshabilitados depende del agente de usuario. Por ejemplo, algunos agentes de usuario "desactivan" elementos de menú deshabilitados, etiquetas de botones, etc.

En este ejemplo, el elemento INPUT está deshabilitado. Por lo tanto, no puede recibir la entrada del usuario ni se enviará su valor con el formulario.

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

Nota. La única forma de modificar dinámicamente el valor del atributo deshabilitado es a través de un script.

Aziz
fuente
86
Solución alternativa: agregue un <input type="hidden">elemento con el mismo nombre / valor que la entrada deshabilitada.
John Kugelman
¿Alguna información sobre qué navegador obedece y cuál no?
Allisone
82
use readonly = "readonly" en su lugar :) vea stackoverflow.com/questions/7357256/…
Adrien Be
1
@ Allisone: Firefox y Chrome parecen obedecer esto (la entrada deshabilitada NO se envía). No lo he probado en otros navegadores.
Adrien Be
1
@JohnKugelman ¿por qué el mismo nombre? el discapacitado no se enviará de todos modos ... también puede dar el nombre verdadero al oculto y usar uno diferente para el discapacitado
Arth
286

disabled la entrada no enviará datos.

Usa el readonlyatributo:

<input type="text" readonly />

Fuente aquí

Fred K
fuente
@FrankFang, Ok, pero cuando paso datos a la plantilla de cuchillas del colectivo Laravel. No va a funcionar no puede enviar datos de esa manera.
ssi-anik
@ ssi-anik readonlyfunciona, solo asegúrese de pasar el atributo "name" a la entrada.
BenNov
26

Puede usar tres cosas para imitar deshabilitado:

  1. HTML: readonlyatributo (para que el valor presente en la entrada se pueda usar en el envío del formulario. Además, el usuario no puede cambiar el valor de entrada)

  2. CSS: 'pointer-events':'none'(impide que el usuario haga clic en la entrada)

  3. HTML: tabindex="-1"(bloqueando al usuario para navegar a la entrada desde el teclado)

Novato_JS
fuente
22

No se envían, porque eso es lo que dice en la especificación W3C .

17.13.2 Controles exitosos

Un control exitoso es "válido" para el envío. [recorte]

  • Los controles que están deshabilitados no pueden tener éxito.

En otras palabras, la especificación dice que los controles que están deshabilitados se consideran inválidos y no deben enviarse.

MiffTheFox
fuente
2

Disabledlos controles no pueden tener éxito y un control exitoso es "válido" para el envío. Esta es la razón por la cual los controles deshabilitados no se envían con el formulario.

Juan de parras
fuente
1

Hay dos atributos, a saber, readonlyy disabled, que pueden hacer una entrada de solo lectura. Pero hay una pequeña diferencia entre ellos.

<input type="text" readonly />
<input type="text" disabled />
  • El readonlyatributo desactiva su texto de entrada y los usuarios ya no pueden cambiarlo.
  • El disabledatributo no solo hará que su texto de entrada esté deshabilitado (inmutable) sino que tampoco se puede enviar .

Enfoque jQuery (1):

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

Enfoque jQuery (2):

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

Enfoque de JavaScript:

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

PS disabledy readonlyson atributos html estándar. propintroducido con jQuery 1.6.

Elyas Hadizadeh
fuente
0

todavía se puede hacer clic en los controles de selección, incluso en el atributo de lectura

si aún desea deshabilitar el control pero desea que se publique su valor. Puede considerar crear un campo oculto. con el mismo valor que tu control.

luego cree un jquery, en el cambio de selección

$('#your_select_id').change(function () {
    $('#your_hidden_selectid').val($('#your_select_id').val());
});
Johnine
fuente