Diga que tenho:
<form method="get" action="something.php">
<input type="text" name="name" />
</form>
<input type="submit" />
Como faço para enviar esse formulário com esse botão de envio fora do formulário, acho que no HTML5 há um atributo de ação para o envio, mas não tenho certeza se isso é totalmente compatível com vários navegadores e se não existe. faça isso?
Respostas:
Atualização: nos navegadores modernos, você pode usar o
form
atributo para fazer isso .Tanto quanto eu sei, você não pode fazer isso sem javascript.
Aqui está o que a especificação diz
Esse é o meu negrito
Um
submit
botão é considerado um controle.http://www.w3.org/TR/html4/interact/forms.html#h-17.2.1
Dos comentários
Por que não colocar o
input
interior do formulário, mas usar CSS para posicioná-lo em outro lugar da página?fonte
No HTML5, existe o atributo form . Basicamente
fonte
<button type="submit" form="frmFoo" onclick="!this.form&&$('#'+$(this).attr('form')).submit()">
como as experiências revelaram, this.form é o formulário anexado DomElement, enquanto é nulo de outra forma. // edit: jQuery, mas também é possível com baunilha<button type="submit" form="frmFoo" onclick="!this.form && document.getElementById('myform').submit()">
Uma solução que funciona muito bem para mim ainda está faltando aqui. Requer ter um elemento visualmente oculto
<submit>
ou<input type="submit">
dentro do elemento<form>
e um<label>
elemento associado fora dele. Seria assim:Agora, esse link permite que você 'clique' no
<submit>
elemento do formulário clicando no<label>
elemento.fonte
label
não é um elemento focalizável (AFAIK), portanto, não é intuitivo para um usuário que está apenas usando o teclado para navegar até o 'botão' e, em seguida, pressione espaço para ativar esse botão, por exemplo. (Eu sei que você pode pressionar<enter>
em vez disso, mas isso não é a única maneira que as pessoas são usadas para formas navegação com o teclado)label
botão da guia via, você pode usar otabindex
atributo HTML:<label for="submit-form" tabindex="0">Submit</label>
conforme esta perguntase você pode usar o jQuery, você pode usar este
Portanto, a linha inferior é criar um botão como Enviar e colocar o botão de envio real no formulário (é claro, ocultá-lo) e enviar o formulário por jquery, clicando no botão 'Enviar falso'. Espero que ajude.
fonte
$('button[form]').click(function (){ var formId = $(this).attr('form'); $('#' + formId).submit(); });
Isso funcionou para mim, ter um botão de envio remoto para um formulário.
fonte
Semelhante a outra solução aqui, com pequenas modificações:
https://www.w3schools.com/tags/att_form.asp
fonte
Tente o seguinte:
Embora eu sugira adicionar um
id
ao formulário e acessar por isso em vez dedocument.forms[index]
.fonte
Você sempre pode usar o jQuery:
fonte
Aqui está uma solução bastante sólida que incorpora as melhores idéias até o momento e inclui minha solução para um problema destacado nas ofertas de Offerein. Nenhum javascript é usado.
Se você se preocupa com a compatibilidade com o IE (e mesmo com o Edge 13), não pode usar o
form="your-form"
atributo .Use uma entrada de envio padrão com nenhuma exibição e adicione um rótulo para ela fora do formulário:
Observe o uso de
display: none;
. Isso é intencional. O uso da.hidden
classe do bootstrap entra em conflito com o jQuery.show()
e.hide()
, e, desde então, foi preterido no Bootstrap 4.Agora basta adicionar um rótulo ao seu envio (com estilo para inicialização):
Ao contrário de outras soluções, também estou usando tabindex - definido como 0 - o que significa que agora somos compatíveis com as guias do teclado. A adição do
role="button"
atributo fornece o estilo CSScursor: pointer
. Et voila. ( Veja este violino ).fonte
Enter
não tem efeito. Assim, ser capaz de tabular isso parece um pouco inútil. Existe uma maneira de fazer isso sem usar JavaScript?<input... />
sintaxe de fechamento automático desleixada e inválida , que quase todo mundo está usando de forma flagrante e incorreta aqui (também), na etiqueta de fechamento sem fechamento adequada! :) parabéns!Este trabalho perfeitamente! ;)
Isso pode ser feito usando o Ajax e com o que chamo de "um elemento de espelho de formulário". Em vez de enviar um formulário com um elemento externo, você pode criar um formulário falso. O formulário anterior não é necessário.
O código ajax seria como:
Isso é muito útil se você deseja enviar alguns dados para outro formulário sem enviar o formulário pai.
Esse código provavelmente pode ser adaptado / otimizado de acordo com a necessidade. Funciona perfeitamente!! ;) Também funciona se você quiser uma caixa de opção de seleção como esta:
Espero que tenha ajudado alguém assim me ajudou. ;)
fonte
Talvez isso possa funcionar, mas não sei se isso é HTML válido.
fonte
Eu tive um problema em que estava tentando ocultar o formulário de um elemento da célula da tabela, mas ainda mostrava o botão de envio de formulários. O problema era que o elemento do formulário ainda estava ocupando um espaço em branco extra, tornando o formato da minha célula da tabela estranho. A exibição: none e visibilidade: atributos ocultos não funcionavam porque ocultava também o botão enviar, pois estava contido no formulário que eu estava tentando ocultar. A resposta simples foi definir a altura dos formulários para quase nada usando CSS
Assim,
CSS -
trabalhou para mim.
fonte
Eu usei dessa maneira, e gostei, valida o formulário antes de enviar também é compatível com o safari / google. no jquery nn
fonte