Kapan dan mengapa 'return false' di JavaScript?

138

Kapan dan mengapa return falsemenggunakan JavaScript?

zsharp
sumber

Jawaban:

89

Seringkali, dalam penangan acara, seperti onsubmit, mengembalikan false adalah cara untuk memberi tahu acara agar tidak benar-benar diaktifkan. Jadi, katakanlah, dalam onsubmitkasus ini, ini berarti formulir tersebut tidak diserahkan.

Chris Jester-Young
sumber
10
Ini sangat bagus jika Anda menginginkan formulir AJAX yang dikirimkan tanpa memuat ulang halaman - tetapi juga berfungsi dengan mengirimkan dan memuat ulang halaman saat javascript tidak tersedia.
Dean Agak
10
Return false sebenarnya berlebihan untuk mencegah tindakan default saat membuat penangan peristiwa dan dapat menyebabkan kode yang rapuh. Penjelasan dan contoh di posting Douglas Neiner di sini fuelyourcoding.com/jquery-events-stop-misusing-return-false
Marquis Wang
3
Dengan jQuery, lebih baik digunakan event.preventDefault()untuk fungsi ini. Saya percaya mengembalikan false sudah tidak digunakan lagi dan tidak selalu berhasil.
onetwopunch
1
Terkadang return falseis dalam metode, apakah ini mengubah sesuatu?
Francisco Corrales Morales
@onetwopunch Bahkan ketika saya mengubahnya menjadi e.preventDefault () memecahkan masalah dengan salah satu fungsi saya berdasarkan peristiwa sentuh namespace. Tidak tahu mengapa tapi Anda memberi saya ide. Terima kasih.
Garavani
69

Saya menduga bahwa yang Anda maksud adalah fakta bahwa Anda sering kali harus memberikan 'return false;' pernyataan dalam penanganan acara Anda, yaitu

<a href="#" onclick="doSomeFunction(); return false;">...

The 'return false;' dalam hal ini menghentikan browser untuk melompat ke lokasi saat ini, seperti yang ditunjukkan oleh href = "#" - sebagai gantinya, hanya doSomeFunction () yang dijalankan. Ini berguna ketika Anda ingin menambahkan acara ke tag jangkar, tetapi tidak ingin browser melompat-lompat ke setiap jangkar pada setiap klik

Matt
sumber
3
Tentu saja, 'href = "#"' adalah praktik yang buruk, tetapi poin keseluruhan Anda masih berlaku :-)
Bobby Jack
4
@ vol7ron: alternatifnya adalah URL asli yang bertindak sebagai alternatif bagi orang-orang tanpa javascript. Jika tidak, mereka hanya akan mengklik link tanpa terjadi apa-apa.
Bobby Jack
3
@ vol7ron: tentu saja, tergantung pada masing-masing dan setiap pengembang (atau pemilik situs) untuk menentukan dengan tepat berapa banyak basis pengguna potensial yang ingin mereka penuhi. Dalam kasus seperti ini, bagaimanapun, di mana opsi yang menargetkan lebih banyak orang SANGAT sederhana, saya tidak mengerti mengapa Anda tidak memilihnya. Juga, ingatlah bahwa ini bukan hanya tentang orang-orang yang secara eksplisit menonaktifkan javascript; bisa jadi: orang lain yang memaksakan keputusan itu pada mereka, masalah jaringan saat mengunduh file JS, bug di satu baris JS yang menyebabkan semuanya gagal. Juga, cukup bagus jika klik kanan-> buka di tab baru masih berfungsi.
Bobby Jack
Tidak kurang dari 1% pengguna. Banyak orang menggunakan ekstensi seperti NoScript karena suatu alasan. Untuk mematikan hal-hal seperti javascript dengan sengaja.
Sepero
@ vol7ron Skenario lain yang perlu dipertimbangkan adalah ketika "javascript rusak" (karena kesalahan sintaks lebih tinggi di halaman). Memiliki cadangan non-js memberi Anda beberapa jaring pengaman untuk skenario ini. (Google.com turun selama hampir 30 menit beberapa waktu yang lalu karena kesalahan sintaks js!)
Alex Czarto
28

Ini digunakan untuk menghentikan penyebaran acara . Anda lihat ketika Anda memiliki dua elemen dengan handler kejadian klik (misalnya)

-----------------------------------
| element1                        |
|   -------------------------     |
|   |element2               |     |
|   -------------------------     |
|                                 |
-----------------------------------

Jika Anda mengklik elemen dalam (elemen2), ini akan memicu peristiwa klik di kedua elemen: 1 dan 2. Ini disebut "Acara menggelegak". Jika Anda ingin menangani kejadian di element2 saja, maka pengendali kejadian harus mengembalikan false untuk menghentikan penyebaran kejadian.

Contoh lainnya adalah link onclick handler. Jika Anda ingin menghentikan formulir tautan bekerja. Anda dapat menambahkan penangan onclick dan mengembalikan false. Untuk menghentikan acara menyebar ke penangan default.

Nadia Alramli
sumber
9
bagian pertama dari jawaban ini salah: kembali falsedari sebuah event handler akan mencegah aksi default yang terkait dengan sebuah event; Anda juga dapat melakukan ini melalui panggilan event.preventDefault()atau pengaturan event.returnValue = false(IE); untuk menghentikan acara menggelegak, Anda harus menelepon event.stopPropagation()atau mengatur event.cancelBubble = true(IE)
Christoph
18

Er ... bagaimana dengan fungsi boolean untuk menunjukkan 'tidak benar'?

Bobby Jack
sumber
4
bagaimana dengan FileNotFound?
nickf
Bahkan di FileNotFound false masih tidak benar, bukan?
Gleb
2
Gleb: Tidak ada "di FileNotFound", ini adalah lelucon TDWTF: thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
Chris Jester-Young
12

Saya juga membuka halaman ini setelah mencari "js, kapan harus menggunakan 'return false;' Di antara hasil penelusuran lainnya adalah halaman yang menurut saya jauh lebih berguna dan mudah, di situs Trik CSS Chris Coyier: Perbedaan antara 'return false;' dan 'e.preventDefault ();'

Inti dari artikelnya adalah:

function () {return false; }

// ADALAH SAMA DENGAN

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

meskipun saya tetap akan merekomendasikan membaca seluruh artikel.

Pembaruan: Setelah memperdebatkan manfaat menggunakan return false; sebagai pengganti e.preventDefault (); & e.stopPropagation (); salah satu rekan kerja saya menunjukkan bahwa return false juga menghentikan eksekusi callback, seperti yang diuraikan dalam artikel ini: jQuery Events: Stop (Mis) Using Return False .

flyingace
sumber
Saya harus memperhatikan di sini setelah beberapa tes kode bahwa: di jquery , function() { return false; }IS SAMA DENGAN function(e) { e.preventDefault(); e.stopPropagation(); }, tetapi di js murni, itu tidak sama, function() { return false; }IS SAMA dengan function(e) { e.preventDefault(); }sebenarnya. Itu tidak menghentikan propagasi.
SkuraZZ
6

Saat menggunakan eachfungsi jQuery , mengembalikan true atau false memiliki arti. Lihat dok

geowa4
sumber
3

Saya pikir pertanyaan yang lebih baik adalah, mengapa dalam kasus di mana Anda mengevaluasi sekumpulan nilai kembalian boolean, apakah Anda TIDAK akan menggunakan true / false ? Maksud saya, Anda mungkin dapat memiliki true / null, true / -1, misc lainnya. Javascript "falsy" untuk diganti, tapi mengapa Anda melakukan itu?

Frank Rosario
sumber
1

Saat Anda ingin memicu kode javascript dari tag jangkar, pengendali onclick harus digunakan daripada javascript: pseudo-protocol. Kode javascript yang berjalan dalam onclick handler harus mengembalikan true atau false (atau ekspresi daripada mengevaluasi true atau false) kembali ke tag itu sendiri - jika mengembalikan true, maka HREF dari jangkar akan diikuti seperti tautan biasa. Jika hasilnya salah, maka HREF akan diabaikan. Inilah sebabnya mengapa "return false;" sering disertakan di akhir kode dalam penangan onclick.

Jamna
sumber
1

Anda menggunakan return false untuk mencegah sesuatu terjadi. Jadi, jika Anda memiliki skrip yang berjalan saat kirim, maka return false akan mencegah pengiriman berfungsi.

rhysclay.dll
sumber
1

Ketika pernyataan kembali dipanggil dalam suatu fungsi, eksekusi fungsi ini dihentikan. Jika ditentukan, nilai yang diberikan dikembalikan ke pemanggil fungsi. Jika ekspresi dihilangkan, undefined dikembalikan.

Untuk lebih lanjut, lihat halaman dokumen MDN untukreturn .

habibun
sumber
1

return false hanya menggunakan jika Anda memiliki beberapa fungsi kerja (dengan beberapa pengujian) atau Anda ingin menghentikan beberapa fungsi, contoh gunakan return false pada akhirnya "onsubmit"

Abdul Aziz Al Basyir
sumber
1

Juga, tautan singkat dan menarik ini untuk membaca https://www.w3schools.com/jsref/event_preventdefault.asp

Definisi dan Penggunaan

Metode preventDefault () membatalkan peristiwa jika dapat dibatalkan, yang berarti bahwa tindakan default yang dimiliki peristiwa tersebut tidak akan terjadi.

Misalnya, ini dapat berguna jika:

Clicking on a "Submit" button, prevent it from submitting a form
Clicking on a link, prevent the link from following the URL

Catatan: Tidak semua acara bisa dibatalkan. Gunakan properti yang dapat dibatalkan untuk mencari tahu apakah suatu acara dapat dibatalkan.

Catatan: Metode preventDefault () tidak mencegah penyebaran lebih lanjut dari suatu peristiwa melalui DOM. Gunakan metode stopPropagation () untuk menangani ini.

jet2016
sumber
Pertimbangkan untuk menggunakan: developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault sebagai lawan w3schools. Tapi jawaban yang solid.
Bibberty