Digamos que você crie um assistente em um formulário HTML. Um botão volta e outro avança. Como o botão voltar aparece primeiro na marcação quando você pressiona Enter, ele usará esse botão para enviar o formulário.
Exemplo:
<form>
<!-- Put your cursor in this field and press Enter -->
<input type="text" name="field1" />
<!-- This is the button that will submit -->
<input type="submit" name="prev" value="Previous Page" />
<!-- But this is the button that I WANT to submit -->
<input type="submit" name="next" value="Next Page" />
</form>
Gostaria de decidir qual botão é usado para enviar o formulário quando um usuário pressiona Enter. Dessa forma, quando você pressionar Entero assistente, passará para a próxima página, não a anterior. Você precisa usar tabindex
para fazer isso?
fonte
Mude o tipo de botão anterior para um botão como este:
Agora, o botão Avançar seria o padrão, além disso, você também poderá adicionar o
default
atributo a ele, para que seu navegador o destaque assim:fonte
default
atributo você está falando? Não existe um atributo "padrão", que seria válido: w3.org/html/wg/drafts/html/master/… (não no HTML5, HTML 4.01 Transitório / Estrito, XHTML 1.0 Estrito). E não vejo por que mudar o tipo de entrada desubmit
parabutton
seria melhor. Você pode ter vários elementos de entrada do tipo de envio em um formulário sem problemas. Eu realmente não entendo por que essa resposta é tão votada.default
atributo seja um atributo Global; atributo enumerado .. que está relacionado aos estados de enumeração: w3.org/html/wg/drafts/html/master/… . além desse ponto .. o aspecto do botão desta resposta não é uma resposta .. é uma " sugestão condicional " ou uma consulta ( própria pergunta ).type="button"
não envia o formulário, enviatype="submit"
, mas alterar o tipo desses botões definitivamente não é uma solução, porque esses botões devem se comportar basicamente da mesma maneira - a questão do OP era como fazer com que o botão "Avançar" padrão para pressionar a tecla Enter. E há uma solução possível na resposta aceita.default
atributo válido parainput
tags (como afirmei anteriormente) em HTML, e os navegadores (populares) NÃO destacarão o botão que possui esse atributo, o que significa que não há implementação fora do padrão desse atributo - então ainda não sei sobre o que @Wally Lawless estava falando e por que essa resposta é superestimada. Existe apenas umdefault
atributo válido introduzido no HTML5, MAS apenas para a<track>
tag: developer.mozilla.org/en-US/docs/Web/HTML/Element/trackDê aos seus botões de envio o mesmo nome:
Quando o usuário pressiona Entere a solicitação vai para o servidor, você pode verificar o valor
submitButton
no código do servidor que contém uma coleção dename/value
pares de formulários . Por exemplo, no ASP Classic :Referência: usando vários botões de envio em um único formulário
fonte
Se o fato de o primeiro botão ser usado por padrão for consistente entre os navegadores, coloque-os da maneira certa no código-fonte e use CSS para mudar de posição aparente.
float
esquerda e direita para trocá-las visualmente, por exemplo.fonte
Às vezes, a solução fornecida pelo @palotasb não é suficiente. Há casos de uso em que, por exemplo, um botão "Filtro" envia é colocado acima dos botões como "Próximo e Anterior". Encontrei uma solução alternativa para isso: copie o botão de envio, que precisa atuar como o botão de envio padrão em uma div oculta, e coloque-o dentro do formulário acima de qualquer outro botão de envio. Tecnicamente, ele será enviado por um botão diferente ao pressionar Enter e ao clicar no botão Avançar visível. Mas como o nome e o valor são iguais, não há diferença no resultado.
fonte
Eu usaria JavaScript para enviar o formulário. A função seria acionada pelo evento OnKeyPress do elemento do formulário e detectaria se oEnter chave foi selecionada. Se for esse o caso, ele enviará o formulário.
Aqui estão duas páginas que fornecem técnicas sobre como fazer isso: 1 , 2 . Com base nesses, aqui está um exemplo de uso (com base aqui ):
fonte
Se você realmente deseja que ele funcione como uma caixa de diálogo de instalação, basta focar no botão "Avançar" do OnLoad.
Dessa forma, se o usuário Returnclicar, o formulário será enviado e seguirá em frente. Se eles quiserem voltar, podem clicar Tabou clicar no botão.
fonte
Isso não pode ser feito com HTML puro. Você deve confiar no JavaScript para esse truque.
No entanto, se você colocar dois formulários na página HTML, poderá fazer isso.
Formulário1 teria o botão anterior.
O Form2 teria qualquer entrada do usuário + o próximo botão.
Quando o usuário pressiona Enterno Form2, o botão Próximo enviar será acionado.
fonte
Você pode fazer isso com CSS.
Coloque os botões na marcação com o
Next
botão primeiro, depois oPrev
botão depois.Em seguida, use CSS para posicioná-los da maneira que você deseja.
fonte
Isso funciona sem JavaScript ou CSS na maioria dos navegadores:
Firefox, Opera, Safari e Google Chrome funcionam.
Como sempre, o Internet Explorer é o problema.
Esta versão funciona quando o JavaScript está ativado:
Portanto, a falha nesta solução é:
A Página anterior não funcionará se você usar o Internet Explorer com JavaScript desativado.
Lembre-se, o botão Voltar ainda funciona!
fonte
Se você tiver vários botões ativos em uma página, poderá fazer algo assim:
Marque o primeiro botão que você deseja acionar no Enterpressionamento de tecla como o botão padrão no formulário. Para o segundo botão, associe-o ao Backspacebotão do teclado. O Backspacecódigo do evento é 8.
fonte
Alterar a ordem das guias deve ser o suficiente para fazer isso. Mantenha simples.
Outra opção simples seria colocar o botão voltar após o botão enviar no código HTML, mas flutuar para a esquerda para que apareça na página antes do botão enviar.
fonte
Mantenha o nome de todos os botões de envio iguais - "anterior".
A única diferença é a
value
atributo com valores exclusivos. Quando criamos o script, esses valores exclusivos nos ajudarão a descobrir qual dos botões de envio foi pressionado.E escreva a seguinte codificação:
fonte
name="perv"
?Outra opção simples seria colocar o botão voltar após o botão enviar no código HTML, mas flutuar para a esquerda, para que apareça na página antes do botão enviar.
Alterar a ordem das guias deve ser o suficiente para fazer isso. Mantenha simples.
fonte
A primeira vez que me deparei com isso, criei um hack onclick () / JavaScript quando as opções não são anteriores / próximas das quais ainda gosto por sua simplicidade. É assim:
Quando um dos botões de envio é clicado, ele armazena a operação desejada em um campo oculto (que é um campo de string incluído no modelo ao qual o formulário está associado) e envia o formulário ao Controlador, que decide tudo. No Controller, você simplesmente escreve:
Você também pode aumentar um pouco isso usando códigos de operação numéricos para evitar a análise de string, mas, a menos que você jogue com enumerações, o código é menos legível, modificável e auto-documentável, e a análise é trivial, de qualquer maneira.
fonte
De https://html.spec.whatwg.org/multipage/forms.html#implicit-submission
Tendo a próxima entrada como type = "submit" e alterando a entrada anterior para type = "button" deve fornecer o comportamento padrão desejado.
fonte
Isto é o que eu tentei:
if
declaração que fará a ação necessária se um dos botões for clicado.No PHP,
fonte
Me deparei com essa pergunta ao tentar encontrar uma resposta basicamente para a mesma coisa, apenas com os controles do ASP.NET, quando descobri que o botão ASP possui uma propriedade chamada
UseSubmitBehavior
que permite definir qual deles é enviado.Apenas no caso de alguém estar procurando o botão ASP.NET para fazer isso.
fonte
Com o JavaScript (aqui jQuery), você pode desativar o botão anterior antes de enviar o formulário.
fonte
Tente isso ..!
fonte
Eu resolvi um problema muito semelhante desta maneira:
Se o JavaScript estiver ativado (na maioria dos casos atualmente), todos os botões de envio serão " degradados " para os botões no carregamento da página via JavaScript (jQuery). Os eventos de clique no botão " degradado " são digitados também em JavaScript.
Se o JavaScript não estiver ativado, o formulário será exibido no navegador com vários botões de envio. Nesse caso, pressionar Enterum
textfield
dentro do formulário enviará o formulário com o primeiro botão em vez do padrão pretendido , mas pelo menos o formulário ainda poderá ser utilizado: você pode enviar com os botões anterior e próximo .Exemplo de trabalho:
fonte
Você pode usar
Tabindex
para resolver esse problema. Também alterar a ordem dos botões seria uma maneira mais eficiente de conseguir isso.Altere a ordem dos botões e adicione
float
valores para atribuir a eles a posição desejada que você deseja mostrar em suaHTML
exibição.fonte
Usando o exemplo que você deu:
Se você clicar em "Página anterior", apenas o valor de "anterior" será enviado. Se você clicar em "Próxima página", apenas o valor de "próxima" será enviado.
Se, no entanto, você pressionar Enter algum lugar do formulário, nem "prev" nem "next" serão enviados.
Portanto, usando o pseudocódigo, você pode fazer o seguinte:
fonte