Eu tenho duas páginas com formulários HTML. A primeira página possui um formulário de envio e a segunda página possui um formulário de confirmação. O primeiro formulário oferece uma escolha de vários controles, enquanto a segunda página exibe os dados do formulário de envio novamente com uma mensagem de confirmação. Nesse segundo formulário, todos os campos devem ser estáticos.
Pelo que pude ver, alguns controles de formulário podem ser readonly
e todos podem ser disabled
, a diferença é que você ainda pode tabular para um campo somente leitura.
Em vez de fazer esse campo por campo, existe alguma maneira de marcar todo o formulário como somente leitura / desativado / estático, de modo que o usuário não possa alterar nenhum dos controles?
Nem todos os elementos do formulário podem ser definidos como
readonly
, por exemplo:A solução razoável seria definir todos os
disabled
atributos dos elementos do formuláriotrue
, pois o OP não declarou que o formulário "bloqueado" específico deveria ser enviado ao servidor (o que odisabled
atributo não permite).Outra solução, apresentada na demonstração abaixo, é colocar uma camada em cima do
form
elemento que impedirá qualquer interação com todos os elementos dentro doform
elemento, pois essa camada é configurada com umz-index
valor maior :DEMO:
fonte
Você pode usar esta função para desativar o formulário:
Veja a demonstração de trabalho aqui
Observe que ele usa jQuery.
fonte
Na página de confirmação, não coloque o conteúdo em controles editáveis, basta escrevê-los na página.
fonte
Não sei como fazer isso, então você precisará criar uma solução personalizada, dependendo da complexidade do seu formulário. Você deve ler este post:
Converter formulários HTML em somente leitura ( atualização : link de postagem quebrado, link arquivado )
EDIT: Com base na sua atualização, por que você está tão preocupado em tê-la somente leitura? Você pode fazer isso pelo lado do cliente, mas, caso contrário, precisará adicionar a tag necessária a cada controle ou converter os dados e exibi-los como texto bruto, sem controles. Se você está tentando torná-lo somente leitura para que a próxima postagem não seja modificada, você tem um problema, porque qualquer pessoa pode mexer com a postagem para produzir o que quiser, quando você realmente receber os dados, é melhor verificar isso. novamente para garantir que seja válido.
fonte
Não existe uma maneira HTML totalmente compatível e oficial de fazer isso, mas um pouco de javascript pode percorrer um longo caminho. Outro problema que você encontrará é que os campos desabilitados não aparecem nos dados do POST
fonte
Esta é uma solução ideal para desativar todas as entradas , áreas de texto , seleções e botões em um elemento especificado.
Para o jQuery 1.6 e superior :
Ou
jQuery 1.5 e abaixo :
E
fonte
Outra maneira simples suportada por todos os navegadores seria:
HTML:
CSS:
Mas lembre-se de que as guias ainda funcionam com essa abordagem e os elementos com foco ainda podem ser manipulados pelo usuário.
fonte
Tenha todos os IDs do formulário numerados e execute um loop for em JS.
fonte
Prefiro usar o jQuery:
find () seria muito mais profundo até o enésimo filho aninhado do que children (), que procura apenas filhos imediatos.
fonte
Caminho mais fácil
fonte
Você adiciona camada invisível html ao formulário. Por exemplo
e estilo:
É claro que o usuário pode ocultar essa camada no navegador da web.
fonte