cegah penyegaran halaman ketika tombol di dalam formulir diklik

149

Saya memiliki masalah saat menggunakan tombol di dalam formulir. Saya ingin tombol itu memanggil fungsi. Memang, tetapi dengan hasil yang tidak diinginkan itu menyegarkan halaman.

Kode sederhana saya seperti ini

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

Pada mengklik tombol, fungsi dipanggil dengan halaman di-refresh, yang me-reset semua permintaan saya sebelumnya yang mempengaruhi halaman saat ini yang merupakan hasil dari permintaan sebelumnya.

Apa yang harus saya lakukan untuk mencegah penyegaran halaman?

bunkdeath
sumber
Anda harus menentukan parameter, jika Anda menggunakan window.location = window.location.href; itu akan menyegarkan seluruh halaman & akan mengatur ulang semua permintaan Anda sebelumnya. silakan periksa ini: stackoverflow.com/questions/133925/…
linguini
@bunkdeath: Jawaban menghisap harus diterima.
Jad Chahine
@JadChahine maaf, saya tidak menyadari saya belum menerima jawabannya, terima kasih telah menunjukkan ini. Saya adalah seorang pemula dan tidak tahu apa yang saya lakukan atau tidak saat itu. Tetapi saya tidak akan menerima jawaban yang Anda sebutkan, tetapi saya akan menerima jawaban yang membantu saya waktu itu :)
bunkdeath

Jawaban:

67

Biarkan getData()kembali salah. Ini akan memperbaikinya.

<form method="POST">
    <button name="data" onclick="return getData()">Click</button>
</form>
JNDPNT
sumber
1
Memang. The onclickFungsi harus kembali palsu, tidak getData.
Quentin
1
Itulah yang saya ment, tapi oke, modifikasi jawabannya jadi lebih jelas.
JNDPNT
5
Anda tidak perlu mengubah fungsi - Anda cukup menggunakan onclick = "getData (); return false;"
2
type="button"benar-benar menangkap.
deepcell
340

Tambahkan type="button"ke tombol.

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

Nilai default typeuntuk sebuah tombol adalah submit, yang memposting sendiri formulir di case Anda dan membuatnya tampak seperti refresh.

detale
sumber
8
jawaban sempurna yang diberikan di sini
timberlake
2
Kecuali ini mencegah validasi bentuk HTML5 (seperti untuk input type = "email").
2540625
2
Anda juga dapat menambah return false;onclick:onclick="getData(); return false;"
JBaczuk
1
Ini pilihan terbaik. Sementara "return false" mungkin bekerja sebaris, tidak ada opsi seperti itu, yang saya tahu, ketika menambahkan pendengar acara. Menentukan tipe = "tombol" benar-benar menghemat hari.
Forever Noob
1
Ini sebenarnya adalah solusi "resmi" untuk masalah seperti ini. Mengembalikan MUNGKIN palsu juga berfungsi, tetapi tombol ketik tidak akan pernah gagal.
pelajar0495
18

Yang perlu Anda lakukan adalah meletakkan tag jenis dan membuat tombol ketik.

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

Itu memecahkan masalah

pengguna8564339
sumber
2
Bisakah Anda menguraikan dan menjelaskan mengapa?
mjk
perilaku default sebuah tombol adalah tipe submit ketika di dalam formulir, saat mengubahnya ke tipe tombol, posting dapat dihindari
Ganesh Kodiganti
16

Masalahnya adalah itu memicu pengiriman formulir. Jika Anda membuat getDatafungsi return falsemaka harus menghentikan formulir mengirimkan.

Atau, Anda juga bisa menggunakan preventDefaultmetode objek acara:

function getData(e) {
    e.preventDefault();
}
James Allardice
sumber
Acara klik yang akan dilewati.
JNDPNT
Kecuali bahwa (tanpa modifikasi lebih lanjut) objek acara tidak akan diteruskan.
Quentin
<button name = "data" onclick = "getData ($ event)"> Klik </button>
RoboMex
9

HTML

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

jQuery

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

alih-alih menggunakan tag tombol, gunakan tag input. Seperti ini,

<form method="POST">
    <input type = "button" name="data" onclick="getData()" value="Click">
</form>
Manik Sood
sumber
tapi ini tidak membuat tombol padabutton type='button'
Pardeep Jain
3

Jika tombol Anda adalah "tombol" default, pastikan Anda menentukan atribut type, jika tidak, WebForm akan memperlakukannya sebagai submit secara default.

jika Anda menggunakan js lakukan seperti ini

<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

});
Demikianlah Deepal
sumber
2

Metode javascript untuk menonaktifkan tombol itu sendiri

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

Setelah semua bidang formulir memenuhi kriteria Anda, Anda dapat mengaktifkan kembali tombol

Menggunakan Jquery akan seperti ini

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

Untuk alasan apa pun di Firefox meskipun saya memiliki return false;dan myform.preventDefault();dalam fungsi, itu menyegarkan halaman setelah fungsi berjalan. Dan saya tidak tahu apakah ini praktik yang baik, tetapi itu berhasil untuk saya, saya masukkanjavascript:this.preventDefault(); atribut action.

Seperti yang saya katakan, saya mencoba semua saran lainnya dan mereka bekerja dengan baik di semua browser kecuali Firefox, jika Anda memiliki masalah yang sama, coba tambahkan acara cegah dalam atribut action baik javascript:return false;atau javascript:this.preventDefault();. Jangan coba-cobajavascript:void(0); yang akan merusak kode Anda. Jangan tanya kenapa :-).

Saya tidak berpikir ini adalah cara yang elegan untuk melakukannya, tetapi dalam kasus saya, saya tidak punya pilihan lain.

Memperbarui:

Jika Anda menerima kesalahan ... setelah ajax diproses, maka hapus tindakan atribut dan dalam onsubmitatribut, jalankan fungsi Anda diikuti dengan pengembalian salah:

onsubmit="functionToRun(); return false;"

Saya tidak tahu mengapa semua masalah dengan Firefox ini, tetapi saya harap ini berhasil.

raphie
sumber
0

Fungsi pengembalian tidak berfungsi dalam semua kasus. Saya mencoba ini:

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

Itu tidak berhasil untuk saya.

Saya mencoba mengembalikan false di dalam fungsi dan itu berhasil untuk saya.

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

Saya menghadapi masalah yang sama. Masalahnya dengan onclickfungsi. Seharusnya tidak ada masalah dengan fungsi getData. Ini bekerja dengan membuat onclickfungsi return false.

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

Ini adalah solusi terbaik:

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

Catatan: Kode saya sangat sederhana.

SELAMAT SINGH
sumber
-2

Anda bisa menggunakan ajax dan jquery untuk menyelesaikan masalah ini:

<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
sumber
Jawaban ini terlalu rumit, apalagi membutuhkan perpustakaan luar untuk mencegah masalah OP di mana metode lain yang lebih sederhana dapat digunakan.
Zac