formun içindeki düğme tıklandığında sayfanın yenilenmesini önle


149

Formun içindeki düğmeleri kullanırken bir sorunum var. Bu düğmenin işlevi çağırmasını istiyorum. Bunu yapar, ancak istenmeyen sonuçlarla sayfayı yeniler.

Basit kodum şöyle

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

Düğmeye tıklandığında işlev, sayfa yenilendiğinde çağrılır; bu, önceki isteğimin sonucu olan geçerli sayfayı etkileyen önceki isteğimi sıfırlar.

Sayfanın yenilenmesini önlemek için ne yapmalıyım?


Eğer window.location = window.location.href kullanırsanız parametreleri belirtmeniz gerekir; sayfanın tamamını yeniler ve önceki tüm isteklerinizi sıfırlar. lütfen bunu kontrol edin: stackoverflow.com/questions/133925/…
— linguini


@bunkdeath: Suck yanıtı kabul edilmelidir.
— Jad Chahine

@JadChahine üzgünüm, cevabı kabul etmediğimi fark etmedim, bunu işaret ettiğiniz için teşekkürler. Yeni başlayan biriydim ve o zamanlar ne yaptığımı ya da yapmadığımı bilmiyordum. Ama bahsettiğiniz cevabı kabul etmeyeceğim, daha ziyade bana yardımcı olanı kabul
— edeceğim

Yanıtlar:


67

Let getData()dönüş false. Bu sorunu düzeltir.

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

1
Aslında. onclickFonksiyon, yanlış değil dönmek zorundadır getData.
— Quentin

1
Bahsettiğim bu, ama tamam, cevabı değiştirdi, böylece daha net.
— JNDPNT

5
işlevi değiştirmeniz gerekmez - sadece onclick = "getData (); return false;"

2
type="button"gerçekten bir şey.
— deepcell

340

type="button"Düğmeye ekleyin .

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

typeBir düğmenin varsayılan değeri submit, formu kendi durumunuzda gönderen ve yenilemeye benzeyen değerdir .


8
mükemmel cevap burada verilen
— timberlake

2
Bunun dışında HTML5 form doğrulaması önlenir (type = "email" girişi gibi).
— 2540625

2
Ayrıca return false;onclick ekleyebilirsiniz :onclick="getData(); return false;"
— JBaczuk

1
Bu en iyi seçenektir. "Return false" satır içi çalışabilirken, olay dinleyicileri eklerken bildiğim böyle bir seçenek yoktur. Type = "button" belirtmek günü gerçekten kurtarır.
— Forever Noob

1
Bu aslında bu tür bir sorunun "resmi" çözümü. Yanlış MIGHT döndürmek de işe yarar, ancak tür düğmesi asla başarısız olmaz.
— student0495

18

Tek yapmanız gereken bir tür etiketi koymak ve tür düğmesine basmaktır.

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

Bu sorunu çözdü


2
Nedenini açıklayabilir ve açıklayabilir misiniz?
— mjk

bir düğmenin varsayılan davranışı, formun içindeyken, düğme türüne değiştirildiğinde
— yazıdan

16

Sorun form gönderme tetikler olmasıdır. getDataİşlevi yaparsanız return false, formun gönderilmesini durdurmalıdır.

Alternatif olarak, preventDefaultolay nesnesinin yöntemini de kullanabilirsiniz :

function getData(e) {
    e.preventDefault();
}

Aktarılacak tıklama etkinliği.
— JNDPNT

Bunun dışında (başka değişiklik yapılmadan) olay nesnesi geçirilmez.
— Quentin

<button name = "data" onclick = "getData ($ event)"> Tıklayın </button>
— RoboMex

9

HTML

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

jQuery

$('#myForm').submit(function() {
    doSomething();
});

$ ('. myForm) $ (' # myForm) olmalı
— Mutant

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

düğme etiketi kullanmak yerine giriş etiketini kullanın. Bunun gibi,

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

ancak bu, düğme olarak oluşturmadıbutton type='button'
— Pardeep Jain

3

Düğmeniz varsayılan "düğme" ise, type özniteliğini ayarladığınızdan emin olun, aksi takdirde WebForm bunu varsayılan olarak gönderme olarak kabul eder.

js kullanıyorsanız böyle yapın

<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

});

2

Düğmenin kendisini devre dışı bırakmak için bir javascript yöntemi

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

Tüm form alanları ölçütlerinizi karşıladıktan sonra düğmeyi yeniden etkinleştirebilirsiniz

Jquery kullanmak böyle bir şey olacak

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

0

Firefox'ta herhangi bir nedenden dolayı return false;ve myform.preventDefault();işlevde olsam da , işlev çalıştıktan sonra sayfayı yeniler. Ve bunun iyi bir uygulama olup olmadığını bilmiyorum, ama benim için işe yarıyor javascript:this.preventDefault();, aksiyon özelliğini ekliyorum.

Dediğim gibi, ben tüm diğer öneri denedik ve hepsi tarayıcılarda cezası çalışır ancak aynı sorunu varsa Firefox, aksiyon özelliğinden olayı önlemek eklemeyi deneyin javascript:return false;veya javascript:this.preventDefault();. javascript:void(0);Hangi kodunuzu kıracak denemeyin . Bana nedenini sorma :-).

Bunun zarif bir yol olduğunu düşünmüyorum, ama benim durumumda başka seçeneğim yoktu.

Güncelleme:

Ajax işlendikten sonra bir hata aldıysanız, öznitelik eylemini kaldırın ve öznitelikte onsubmit, işlevinizi yürütün ve yanlış dönüşü izleyin:

onsubmit="functionToRun(); return false;"

Firefox ile tüm bu sorunların nedenini bilmiyorum, ama umarım bu işe yarar.


0

Geri dönüş fonksiyonu her durumda çalışmıyor. Bunu denedim:

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

Benim için işe yaramadı.

İşlevin içinde yanlış döndürmeye çalıştım ve bu benim için çalıştı.

function Reset()
{
    .
    .
    .
    return false;
}

0

Aynı sorunla karşı karşıyaydım. Sorun onclickfonksiyonu ile. İşlevle ilgili herhangi bir sorun olmamalıdır getData. onclickİşlevi yanlış döndürerek çalıştı .

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

0

Bu en iyi çözümdür:

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

Not: Kodum çok basit.


-2

Bu sorunu çözmek için ajax ve jquery kullanabilirsiniz:

<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>

Bu cevap, OP'nin diğer daha basit yöntemlerin kullanılabileceği sorunu önlemek için bir dış kütüphane gerektirmesine rağmen, aşırı derecede karmaşıktır.
— Zac
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.