JavaScript'te ne zaman ve neden 'yanlış döndürür'?


Yanıtlar:


88

Genellikle, olay işleyicileri, örneğin onsubmit, yanlış döndürmek, olaya gerçekte ateş etmemesini söylemenin bir yoludur. Diyelim ki, bu onsubmitdurumda, formun gönderilmediği anlamına gelir.


10
Bu, sayfayı yeniden yüklemeden gönderen bir AJAX formu istiyorsanız, ancak javascript kullanılamadığında sayfayı göndererek ve yeniden yükleyerek de işe yararsa bu özellikle iyidir.
Dean Rather

10
Return false, olay işleyicileri oluştururken varsayılan eylemi önlemek için aşırı derecede doludur ve kırılgan koda yol açabilir. Douglas Neiner'ın yayınındaki açıklama ve örnekler burada fuelyourcoding.com/jquery-events-stop-misusing-return-false
Marquis Wang

3
JQuery ile event.preventDefault()bu işlev için kullanmak daha iyidir . Yanlış döndürmenin onaylanmadığına inanıyorum ve artık her zaman çalışmıyor.
onetwopunch

1
Bazen return falseyöntemde, bu bir şey değiştirir mi?
Francisco Corrales Morales

@onetwopunch Aslında e.preventDefault () olarak değiştirdiğimde, bir isim alanı dokunma olayına dayalı olarak işlevlerimden biriyle ilgili bir sorunu çözdüm. Nedenini bilmiyorum ama bana fikir verdin. Teşekkürler.
Garavani

69

Sık sık bir 'yanlış dönüş' koymanız gerektiğinden bahsettiğinizi tahmin ediyorum; etkinlik işleyicilerinizdeki ifadeyi, yani

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

'Yanlış dönüş'; bu durumda href = "#" ile gösterildiği gibi tarayıcının geçerli konuma atlamasını durdurur - bunun yerine yalnızca doSomeFunction () yürütülür. Bağlantı etiketlerine etkinlik eklemek istediğinizde kullanışlıdır, ancak tarayıcının her tıklamada her bir bağlantıya yukarı ve aşağı atlamasını istemezsiniz.


3
Tabii ki, 'href = "#"' kötü bir uygulamadır, ancak genel noktanız hala :-)
Bobby Jack

4
@ vol7ron: alternatif, javascript içermeyen kişiler için alternatif işlevi gören gerçek bir URL'dir. Aksi takdirde, hiçbir şey olmayan bir bağlantıya tıklayacaklar.
Bobby Jack

3
@ vol7ron: elbette, potansiyel kullanıcı tabanının ne kadarını karşılamak istediklerini tam olarak belirlemek her geliştiriciye (veya site sahibine) bağlıdır. Bununla birlikte, daha fazla kişiyi hedefleyen seçeneğin çok basit olduğu böyle bir durumda, neden bunu tercih etmeyeceğinizi anlamıyorum. Ayrıca, bunun sadece javascript'i açıkça devre dışı bırakan insanlarla ilgili olmadığını unutmayın; bu olabilir: başkasına bu kararı empoze eden, JS dosyasını indiren bir ağ sorunu, JS'nin bir satırındaki her şeyin başarısız olmasına neden olan bir hata. Ayrıca, sağ tıklayın-> yeni sekmede aç hala çalışıyorsa oldukça güzel.
Bobby Jack

Kullanıcıların% 1'inden az değildir. Birçok kişi bir nedenden dolayı NoScript gibi uzantılar kullanır. Javascript gibi şeyleri bilerek kapatmak.
Sepero

@ vol7ron Dikkate alınması gereken diğer senaryo, "javascript kırıldığında" (sayfada daha yüksek bir sözdizimi hatası nedeniyle). Js dışı yedeklere sahip olmak, bu senaryo için bazı güvenlik ağları sağlar. (Google.com, bir js sözdizimi hatası nedeniyle yaklaşık 30 dakika geri döndü!)
Alex Czarto

28

Olayın yayılmasını durdurmak için kullanılır . Her ikisi de bir tıklama olay işleyicisiyle iki öğeniz olduğunu görürsünüz (örneğin)

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

İç öğeye (element2) tıklarsanız, her iki öğede de bir tıklama olayını tetikler: 1 ve 2. Buna "Olay köpürmesi" denir. Olayı yalnızca element2'de işlemek istiyorsanız, olay işleyicisini durdurmak için olay işleyicisinin false değerini döndürmesi gerekir.

Başka bir örnek, tıklama işleyicisinin bağlantısı olacaktır. Bir bağlantı formunun çalışmasını durdurmak istiyorsanız. Bir onclick işleyicisi ekleyebilir ve false değerini döndürebilirsiniz. Etkinliğin varsayılan işleyiciye yayılmasını durdurmak için.


9
bu cevabın ilk kısmı yanlış: falsebir olay işleyicisinden dönmek , bir olayla ilişkili varsayılan eylemi önleyecektir; bunu arama event.preventDefault()veya ayar event.returnValue = false(IE) yoluyla da yapabilirsiniz ; etkinliğin köpürmesini durdurmak için, (IE) öğesini aramanız event.stopPropagation()veya ayarlamanız gerekirevent.cancelBubble = true
Christoph


12

"Js, ne zaman 'return false;" Diğer arama sonuçları arasında Chris Coyier'in CSS-Tricks sitesinde çok daha kullanışlı ve anlaşılır bulduğum bir sayfa vardı: 'return false;' ve 'e.preventDefault ();'

Makalesinin özü:

function () {dönüş yanlış; }

// EŞİTTİR

işlev (e) {e.preventDefault (); e.stopPropagation (); }

yine de tüm makaleyi okumanızı tavsiye ederim.

Güncelleme: return false kullanmanın yararlarını tartıştıktan sonra; e.preventDefault () yerine; & e.stopPropagation (); çalışma arkadaşlarımdan biri, yanlış döndürmenin de bu makalede ana hatlarıyla belirtildiği üzere geri arama yürütülmesini durdurduğuna dikkat çekti: jQuery Events: Stop (Mis) Return False kullanarak .


Burada bazı kod testinden sonra fark etmeliyim: jquery , function() { return false; }EQUAL TO function(e) { e.preventDefault(); e.stopPropagation(); }, ama saf js, aynı değil, aslında function() { return false; }EQUAL TO function(e) { e.preventDefault(); }. O değil yayılmasını durdurmak.
SkuraZZ

6

JQuery eachişlevini kullanırken, true veya false döndürmenin bir anlamı vardır. Dokümanı görün


3

Bence daha iyi bir soru, neden bir boole dönüş değerleri kümesi değerlendirdiğiniz bir durumda doğru / yanlış kullanmıyorsunuz ? Yani, muhtemelen true / null, true / -1, başka çeşitli olabilir. Javascript "falsy" değerleri yerine geçecek, ama neden bunu yapasın ki?


1

Bir tutturma etiketinden javascript kodunu tetiklemek istediğinizde, javascript: sözde protokol yerine onclick işleyicisi kullanılmalıdır. Onclick işleyicisinde çalışan javascript kodu, doğru veya yanlış (veya değerlendirmelerden doğru veya yanlış değerine doğru bir ifade) etikete geri dönmelidir - eğer doğru döndürürse, çapanın HREF değeri normal bir bağlantı gibi izlenecektir. False değerini döndürürse, HREF dikkate alınmaz. Bu yüzden "dönüş yanlış;" genellikle bir onclick işleyicisi içindeki kodun sonuna eklenir.


1

Bir şeylerin olmasını önlemek için return false kullanırsınız. Gönderme sırasında çalışan bir komut dosyanız varsa, return false, gönderimin çalışmasını engeller.


1

Bir işlevde bir return ifadesi çağrıldığında, bu işlevin yürütülmesi durdurulur. Belirtilirse, belirli bir değer işlev arayanına döndürülür. İfade atlanırsa, bunun yerine undefined döndürülür.

Daha fazla bilgi için MDN dokümanları sayfasınareturn göz atın .


1

yalnızca işlevde bazı çalışmalarınız varsa (bazı testlerle) veya bazı işlevleri durdurmak istiyorsanız false kullanarak dönüş, örnek "false"


1

Ayrıca, https://www.w3schools.com/jsref/event_preventdefault.asp adresinden okumak için bu kısa ve ilginç bağlantı

Tanım ve Kullanım

PreventDefault () yöntemi, iptal edilebilirse olayı iptal eder; yani, olaya ait varsayılan eylem gerçekleşmez.

Örneğin, bu şu durumlarda yararlı olabilir:

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

Not: Tüm olaylar iptal edilemez. Bir olayın iptal edilebilir olup olmadığını öğrenmek için cancelable özelliğini kullanın.

Not: preventDefault () yöntemi, bir etkinliğin DOM aracılığıyla daha fazla yayılmasını engellemez. Bunu işlemek için stopPropagation () yöntemini kullanın.


Şunları düşünün: developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault yerine w3schools olarak. Ama sağlam cevap.
Bibberty
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.