impedir a atualização da página ao clicar no botão dentro do formulário

149

Tenho um problema ao usar os botões dentro do formulário. Quero que esse botão chame a função. Sim, mas com resultado indesejado que atualiza a página.

Meu código simples é assim

<form method="POST">
    <button name="data" onclick="getData()">Click</button>
</form>

Ao clicar no botão, a função é chamada com a página atualizada, que redefine toda a minha solicitação anterior que afeta a página atual que foi o resultado da solicitação anterior.

O que devo fazer para impedir a atualização da página?

bunkdeath
fonte
você precisa especificar os parâmetros, se você simplesmente usar window.location = window.location.href; atualiza a página inteira e redefine todas as suas solicitações anteriores. verifique isso: stackoverflow.com/questions/133925/…
linguini
@bunkdeath: Chupar resposta deve ser aceito.
Jad Chahine
@JadChahine desculpe, não percebi que não aceitei a resposta, obrigado por apontar isso. Eu era iniciante e não sabia o que fazia ou não naquela época. Mas eu não ficará aceitar a resposta que você mencionou, sim eu vou aceitar o que me ajudou naquele tempo :)
bunkdeath

Respostas:

67

Vamos getData()retornar falso. Isso vai consertar.

<form method="POST">
    <button name="data" onclick="return getData()">Click</button>
</form>
JNDPNT
fonte
1
De fato. A onclickfunção tem que retornar false, não getData.
Quentin
1
É isso que eu digo, mas tudo bem, modifiquei a resposta para ficar mais claro.
JNDPNT 18/10/11
5
você não precisa alterar a função - basta usar onclick = "getData (); return false;"
2
type="button"é realmente o problema.
deepcell 25/03
340

Adicione type="button"ao botão

<button name="data" type="button" onclick="getData()">Click</button>

O valor padrão de typepara um botão é submit, que publica automaticamente o formulário no seu caso e faz com que pareça uma atualização.

detale
fonte
8
resposta perfeita dada aqui
timberlake
2
Exceto isso impede a validação do formulário HTML5 (como para entrada do tipo = "email").
2540625
2
Você também pode adicionar return false;ao onclick:onclick="getData(); return false;"
JBaczuk 14/09
1
Essa é a melhor opção. Embora "return false" possa funcionar em linha, não tenho essa opção ao adicionar ouvintes de eventos. Especificar o tipo = "botão" realmente salva o dia.
Para sempre Noob
1
Esta é realmente a solução "oficial" para esse tipo de problema. Retornar MIGHT falso também funciona, mas o botão de tipo nunca falha.
student0495
18

Tudo o que você precisa fazer é colocar uma tag de tipo e pressionar o botão de tipo.

<button id="btnId" type="button">Hide/Show</button>

Isso resolve o problema

user8564339
fonte
2
Você pode elaborar e explicar o porquê?
Mjk # 5/17
o comportamento padrão de um botão é do tipo de envio quando dentro de um formulário, ao alterá-lo para o tipo de botão, a postagem pode ser evitada
Ganesh Kodiganti
16

O problema é que ele aciona o envio do formulário. Se você criar a getDatafunção return false, ela deverá interromper o envio do formulário.

Como alternativa, você também pode usar o preventDefaultmétodo do objeto de evento:

function getData(e) {
    e.preventDefault();
}
James Allardice
fonte
O evento de clique que será passado.
JNDPNT 18/10/11
Exceto que (sem modificações adicionais) o objeto de evento não será passado.
Quentin
<button name = "data" onclick = "getData ($ event)"> Clique </button>
RoboMex 04/12/19
9

HTML

<form onsubmit="return false;" id="myForm">
</form>

jQuery

$('#myForm').submit(function() {
    doSomething();
});
Mehdiway
fonte
$ ('. myForm) deve ser $ (' # myForm)
Mutant
3
<form method="POST">
    <button name="data" onclick="getData()">Click</button>
</form>

em vez de usar a tag de botão, use a tag de entrada. Como isso,

<form method="POST">
    <input type = "button" name="data" onclick="getData()" value="Click">
</form>
Manik Sood
fonte
mas isso did't criar botão a partir debutton type='button'
Pardeep Jain
3

Se o seu botão for "botão" padrão, certifique-se de definir explicitamente o atributo type, caso contrário, o formulário da Web o tratará como envio por padrão.

se você usar js faça assim

<form method="POST">
   <button name="data"  type="button" id="btnData" onclick="getData()">Click</button>
</form> 

**If you use jquery use like this**


<form method="POST">
   <button name="data"  type="button" id="btnData">Click</button>
</form>




$('#btnData').click(function(e){
   e.preventDefault();
   // Code goes here
getData(); // your onclick function call here

});
Thusitha Deepal
fonte
2

Um método javascript para desativar o próprio botão

document.getElementById("ID NAME").disabled = true;

Depois que todos os campos do formulário atenderem aos seus critérios, você poderá reativar o botão

Usar um Jquery será algo como isto

$( "#ID NAME" ).prop( "disabled", true);
repzero
fonte
0

Por qualquer motivo no Firefox, embora eu tenha return false;e myform.preventDefault();na função, ele atualiza a página após a execução da função. E não sei se essa é uma boa prática, mas funciona para mim, insirojavascript:this.preventDefault(); no atributo action.

Como eu disse, tentei todas as outras sugestões e elas funcionam bem em todos os navegadores, mas o Firefox, se você tiver o mesmo problema, tente adicionar o evento prevent no atributo action javascript:return false;ou javascript:this.preventDefault();. Não tente comjavascript:void(0); que irá quebrar o seu código. Não me pergunte por que :-).

Não acho que seja uma maneira elegante de fazê-lo, mas no meu caso não tive outra escolha.

Atualizar:

Se você recebeu um erro ... depois que o ajax é processado, remova a ação do atributo e, no onsubmitatributo, execute sua função seguida pelo retorno falso:

onsubmit="functionToRun(); return false;"

Não sei por que todo esse problema com o Firefox, mas espero que funcione.

raphie
fonte
0

A função Return não está funcionando em todos os casos. Eu tentei isso:

<button id="Reset" class="Button-class" onclick="return Reset()">Show result</button>

Não funcionou para mim.

Eu tentei retornar false dentro da função e funcionou para mim.

function Reset()
{
    .
    .
    .
    return false;
}
Harsha Vardhini
fonte
0

Eu estava enfrentando o mesmo problema. O problema está com a onclickfunção Não deve haver nenhum problema com a função getData. Funcionou fazendo com que a onclickfunção retornasse falsa.

<form method="POST">
    <button name="data" onclick="getData(); return false">Click</button>
</form>
Tasnim Fabiha
fonte
0

Esta é a melhor solução:

<form  method="post"> 
    <button  type="button" name="data" onclick="getData()">Click Me</button>
</form>

Nota: Meu código é muito simples.

FELIZ SINGH
fonte
-2

Você pode usar ajax e jquery para resolver esse problema:

<script>
    function getData() {
        $.ajax({
            url : "/urlpattern",
            type : "post",
            success : function(data) {
                alert("success");
            } 
        });
    }
</script>
<form method="POST">
    <button name="data" type="button" onclick="getData()">Click</button>
</form>
Rasmi Ranjan Pradhan
fonte
Essa resposta é muito complicada, e muito menos exigir uma biblioteca externa para evitar o problema do OP, onde outros métodos mais simples podem ser usados.
Zac