Valores de entradas desativadas não serão enviados

Respostas:

189

Sim, todos os navegadores não devem enviar as entradas desativadas, pois são somente leitura.

Mais informações (seção 17.12.1)

Definições de atributo

disabled [CI] Quando definido para um controle de formulário, esse atributo booleano desabilita o controle para entrada do usuário. Quando definido, o atributo desativado tem os seguintes efeitos em um elemento:

  • Os controles desativados não recebem foco.
  • Os controles desativados são ignorados na navegação por guias.
  • Controles desativados não podem ser bem-sucedidos.

Os seguintes elementos suportam o atributo desativado: BUTTON, INPUT, OPTGROUP, OPTION, SELECT e TEXTAREA.

Este atributo é herdado, mas as declarações locais substituem o valor herdado.

Como os elementos desabilitados são renderizados depende do agente do usuário. Por exemplo, alguns agentes do usuário "desabilitam" os itens de menu, os rótulos dos botões, etc.

Neste exemplo, o elemento INPUT está desativado. Portanto, ele não pode receber entrada do usuário nem seu valor será enviado com o formulário.

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

Nota. A única maneira de modificar dinamicamente o valor do atributo desativado é através de um script.

Aziz
fonte
86
Solução alternativa: adicione um <input type="hidden">elemento com o mesmo nome / valor da entrada desativada.
John Kugelman
alguma informação sobre qual navegador faz e qual não obedece?
precisa saber é
82
use readonly = "readonly" em vez disso :) consulte stackoverflow.com/questions/7357256/…
Adrien Seja
1
@ Allisone: Firefox e Chrome parecem obedecer a isso (entrada desativada NÃO é enviada). Não tentei em outros navegadores.
Adrien Seja
1
@JohnKugelman porque o mesmo nome? o deficiente não será submetido qualquer forma .. pode muito bem dar o verdadeiro nome para o oculto e usar um diferente para o disabled
Arth
286

disabled entrada não enviará dados.

Use o readonlyatributo:

<input type="text" readonly />

Fonte aqui

Fred K
fonte
@FrankFang, Ok, mas quando estou transmitindo dados para o modelo blade do coletivo Laravel. Isso não vai funcionar. não pode enviar dados dessa maneira.
ssi-anik
O @ ssi-anik readonlyfunciona, apenas certifique-se de passar "name" attr para a entrada.
BenNov 10/04
26

Você pode usar três coisas para imitar os desativados:

  1. readonlyAtributo HTML: (para que o valor presente na entrada possa ser usado no envio do formulário. Além disso, o usuário não pode alterar o valor da entrada)

  2. CSS: 'pointer-events':'none'(impedindo o usuário de clicar na entrada)

  3. HTML: tabindex="-1"(bloqueando o usuário para navegar até a entrada do teclado)

Novice_JS
fonte
22

Eles não são enviados, porque é o que diz a especificação W3C .

17.13.2 Controles bem-sucedidos

Um controle bem-sucedido é "válido" para envio. [recorte]

  • Os controles desativados não podem ser bem-sucedidos.

Em outras palavras, a especificação diz que os controles desativados são considerados inválidos e não devem ser enviados.

MiffTheFox
fonte
2

Disabledcontroles não podem ser bem-sucedidos e um controle bem-sucedido é "válido" para envio. Esse é o motivo pelo qual os controles desativados não são enviados com o formulário.

Juan de Parras
fonte
1

Existem dois atributos, a saber, readonlye disabledque podem gerar uma entrada semi-somente leitura. Mas há uma pequena diferença entre eles.

<input type="text" readonly />
<input type="text" disabled />
  • O readonlyatributo desabilita o texto de entrada e os usuários não podem mais alterá-lo.
  • O disabledatributo não apenas tornará seu texto de entrada desativado (imutável), mas também não poderá ser enviado .

Abordagem jQuery (1):

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

Abordagem jQuery (2):

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

Abordagem JavaScript:

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

PS disablede readonlysão atributos html padrão. propintroduzido com jQuery 1.6.

Elyas Hadizadeh
fonte
0

os controles selecionados ainda podem ser clicados, mesmo no atributo readonly

se você ainda deseja desativar o controle, mas deseja que seu valor seja postado. Você pode considerar criar um campo oculto. com o mesmo valor que seu controle.

então crie um jquery, em select change

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