formulário sem ação e onde entrar não recarrega a página


94

Estou procurando a maneira mais simples de criar um formulário HTML que não tenha um botão de envio. Isso por si só é fácil, mas também preciso impedir que o formulário seja recarregado quando coisas semelhantes a envio são feitas (por exemplo, acertar Enterum campo de texto).


Você quer que nunca seja submetido?
— UpTheCreek

Se você tiver apenas um <form> com um único <input> que é um campo de texto, ele não deve ser enviado quando você pressiona Enter, deve?
— Zack The Human

Eu quero que ele seja submetido sob alguma outra condição (na verdade, pressionando um certo botão). O problema é que não consegui fazer com que o comportamento 'entrar no campo de texto' de postar / acessar a mesma url não acontecesse. Portanto, meu formulário cuidadosamente criado, onde você precisa fazer X, Y e Z para enviá-lo, pode ser enviado erroneamente pelo usuário pressionando Enter.
— Matt Roberts

Respostas:


44

Adicione um manipulador onsubmit ao formulário (via plain js ou jquery $ (). Submit (fn)) e retorne false a menos que suas condições específicas sejam atendidas.

A menos que você não queira que o formulário seja enviado, nunca - nesse caso, por que não deixar de fora o atributo 'ação' no elemento do formulário?


150
Um formulário sem um actionatributo não é um formulário, de acordo com os padrões - e realmente causará uma recarga de página em alguns navegadores. Descobri que action="javascript:void(0);"funciona bem.
— Dutchie432

A resposta de Dutchies funciona perfeitamente. O Firefox estava apenas atualizando a página.
— IAmGroot

1
@ Dutchie432 deve transformar isso em uma resposta em vez de um comentário. Em seguida, faria o seu caminho para o topo, onde pertence. Alternativamente, KPrime poderia ajustar sua resposta, já que omitir a ação não funcionou para mim ...
— sábio

210

Você deseja incluir action="javascript:void(0);"em seu formulário para evitar recarregamentos de página e manter o padrão HTML.


4
Só passei 2 dias tentando suprimir a ação padrão do botão enviar quando o enter é pressionado, pois embora a ação tenha ocorrido, a página acabou recarregando (Firefox). Adicionar o javascript void como ação no formulário corrigiu isso. Obrigado por isso.
— Tony Payne

obrigado por esta resposta adicional. isso ainda funciona - mas ainda é a solução de "última geração" em 2016?
— low_rents

1
@low_rents Eu ainda uso o tempo todo e não encontrei pessoalmente uma solução melhor.
— Dutchie432

1
Obrigado pela solução precisa e excelente para resolver o recarregamento da página enquanto pressiona a tecla Enter :) Melhor solução.
— Imran Rafiq Rather

9

Basta adicionar este evento ao seu campo de texto. Isso impedirá um envio ao pressionar Enter, e você está livre para adicionar um botão de envio ou chamar form.submit () conforme necessário:

onKeyPress="if (event.which == 13) return false;"

Por exemplo:

<input id="txt" type="text" onKeyPress="if (event.which == 13) return false;"></input>

1
Obrigado por isso. Receio que a clareza de sua resposta deixou claro para mim a correção de uma resposta anterior, de modo que você não obteve a resposta aceita, mas obteve minha gratidão e um voto positivo!
— Matt Roberts

2
Obrigado. Feliz em ajudar. Eu nunca fui um dos holofotes de qualquer maneira. ;)
— GenericMeatUnit

5

Quando você pressiona enter em um formulário, o comportamento natural do formulário é ser submetido, para parar esse comportamento que não é natural, você tem que evitar que ele envie (comportamento padrão), com jquery:

$("#yourFormId").on("submit",function(event){event.preventDefault()})

4

uma ideia:

<form method="POST" action="javascript:void(0);" onSubmit="CheckPassword()">
    <input id="pwset" type="text" size="20" name='pwuser'><br><br>
    <button type="button" onclick="CheckPassword()">Next</button>
</form>

e

<script type="text/javascript">
    $("#pwset").focus();
    function CheckPassword()
    {
        inputtxt = $("#pwset").val();
        //and now your code
        $("#div1").load("next.php #div2");
        return false;
    }
</script>

1

Duas maneiras de resolver:

  1. o valor da ação do formulário é "javascript: void (0);".
  2. adicione ouvinte de evento de pressionamento de tecla para o formulário para evitar o envio.

Ouvir o evento de pressionamento de tecla (por exemplo, tecla enter) pode trazer problemas com textareas, e possivelmente selecionar autocompletar ou menus suspensos, e o celular pode ser outra fonte de problemas.
— luckydonald

0

A primeira resposta é a melhor solução:

Adicione um manipulador onsubmit ao formulário (via plain js ou jquery $ (). Submit (fn)) e retorne false a menos que suas condições específicas sejam atendidas.

Mais específico com jquery:

$('#your-form-id').submit(function(){return false;});

A menos que você não queira que o formulário seja enviado, nunca - nesse caso, por que não deixar de fora o atributo 'ação' no elemento do formulário?

Escrever extensões do Chrome é um exemplo de onde você pode ter um formulário para entrada do usuário, mas não deseja que ele seja enviado. Se você usar action = "javascript: void (0);", o código provavelmente funcionará, mas você terminará com este problema em que obtém um erro sobre a execução de Javascript embutido.

Se você deixar a ação completamente de fora, o formulário será recarregado, o que também é indesejável em alguns casos ao escrever uma extensão do Chrome. Ou se você tivesse uma página da web com algum tipo de calculadora embutida, onde o usuário forneceria alguma entrada e clicaria em "Calcular" ou algo parecido.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.