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.