Khi nào và tại sao 'trả về false' trong JavaScript?


Câu trả lời:


88

Thông thường, trong các trình xử lý sự kiện, chẳng hạn như onsubmit, trả về false là một cách để nói sự kiện không thực sự kích hoạt. Vì vậy, giả sử, trong onsubmittrường hợp, điều này có nghĩa là biểu mẫu không được gửi.


10
Điều này đặc biệt tốt nếu bạn muốn một biểu mẫu AJAX gửi mà không cần tải lại trang - nhưng cũng hoạt động bằng cách gửi và tải lại trang khi javascript không có sẵn.
Trưởng khoa

10
Trả về false thực sự là quá mức cần thiết để ngăn chặn hành động mặc định khi tạo trình xử lý sự kiện và có thể dẫn đến mã dễ vỡ. Giải thích và ví dụ tại bài đăng của Douglas Neiner tại đây fuelyourcoding.com/jquery-events-stop-misuses-return-false
Hầu tước Wang

3
Với jQuery, tốt hơn là sử dụng event.preventDefault()chức năng này. Tôi tin rằng trả lại sai là không được chấp nhận và không luôn luôn làm việc nữa.
onetwopunch

1
Đôi khi return falselà trong phương thức, điều này có thay đổi gì không?
Francisco Corrales Morales

@onetwopunch Trong thực tế khi tôi thay đổi nó thành e.preventDefault () đã giải quyết vấn đề với một trong các chức năng của tôi dựa trên sự kiện chạm vào không gian tên. Không biết tại sao nhưng bạn đã cho tôi ý tưởng. Cảm ơn.
Garavani

69

Tôi đoán rằng bạn đang đề cập đến thực tế là bạn thường phải đặt 'trả về sai;' tuyên bố trong xử lý sự kiện của bạn, tức là

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

'Trả về sai;' trong trường hợp này ngăn trình duyệt nhảy đến vị trí hiện tại, như được chỉ ra bởi href = "#" - thay vào đó, chỉ doSomeFunction () được thực thi. Nó hữu ích khi bạn muốn thêm các sự kiện vào thẻ neo, nhưng không muốn trình duyệt nhảy lên xuống từng neo trên mỗi lần nhấp


3
Tất nhiên, 'href = "#"' là thực tiễn tồi, nhưng điểm chung của bạn vẫn đứng vững :-)
Bobby Jack

4
@ vol7ron: thay thế là một URL thực sự hoạt động như một thay thế cho những người không có javascript. Nếu không, họ sẽ chỉ nhấp vào một liên kết không có gì xảy ra.
Bobby Jack

3
@ vol7ron: tất nhiên, tùy thuộc vào từng nhà phát triển (hoặc chủ sở hữu trang web) để xác định chính xác bao nhiêu cơ sở người dùng tiềm năng mà họ muốn phục vụ. Tuy nhiên, trong trường hợp như thế này, trong đó tùy chọn nhắm mục tiêu đến nhiều người hơn là đơn giản, tôi không hiểu tại sao bạn không chọn nó. Ngoài ra, hãy nhớ rằng không chỉ về việc mọi người vô hiệu hóa javascript một cách rõ ràng; đó có thể là: một người khác áp đặt quyết định đó lên họ, một sự cố mạng khi tải xuống tệp JS, một lỗi trong một dòng của JS khiến tất cả đều thất bại. Ngoài ra, nó khá hay nếu nhấp chuột phải-> mở trong tab mới vẫn hoạt động.
Bobby Jack

Đó là không ít hơn 1% người dùng. Nhiều người sử dụng các tiện ích mở rộng như NoScript vì một lý do. Để tắt những thứ như javascript có chủ đích.
Sepero

@ vol7ron Kịch bản khác cần xem xét là khi "javascript bị hỏng" (do lỗi cú pháp cao hơn trong trang). Có dự phòng không js cung cấp cho bạn một số lưới an toàn cho kịch bản này. (Google.com đã ngừng hoạt động gần 30 phút một lần do lỗi cú pháp js!)
Alex Czarto

28

Nó được sử dụng để ngăn chặn sự lan truyền của sự kiện . Bạn thấy khi bạn có hai yếu tố với một trình xử lý sự kiện nhấp chuột (ví dụ)

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

Nếu bạn nhấp vào phần tử bên trong (phần tử 2), nó sẽ kích hoạt một sự kiện nhấp trong cả hai phần tử: 1 và 2. Nó được gọi là "Sự kiện sủi bọt". Nếu bạn chỉ muốn xử lý sự kiện trong phần tử 2, thì trình xử lý sự kiện phải trả về false để dừng việc truyền sự kiện.

Một ví dụ khác sẽ là trình xử lý liên kết onclick. Nếu bạn muốn dừng một hình thức liên kết làm việc. Bạn có thể thêm một trình xử lý onclick và trả về false. Để ngăn sự kiện truyền đến trình xử lý mặc định.


9
phần đầu tiên của câu trả lời này là sai: trở về falsetừ một trình xử lý sự kiện sẽ ngăn hành động mặc định liên quan đến một sự kiện; bạn cũng có thể thực hiện việc này thông qua gọi điện thoại event.preventDefault()hoặc cài đặt event.returnValue = false(IE); để ngăn sự kiện nổi bọt, bạn sẽ phải gọi event.stopPropagation()hoặc cài đặt event.cancelBubble = true(IE)
Christoph

18

Er ... làm thế nào về một hàm boolean để chỉ 'không đúng'?


4
FileNotFound thì sao?
nickf

Ngay cả trong FileNotFound sai vẫn không đúng phải không?
Gleb

2
Gleb: Không có "trong FileNotFound", đó là một trò đùa TDWTF
Chris Jester-Young

12

Tôi cũng đã đến trang này sau khi tìm kiếm "js, khi nào sử dụng 'return false;' Trong số các kết quả tìm kiếm khác là một trang tôi thấy hữu ích và đơn giản hơn nhiều, trên trang CSS-Tricks của Chris Coyier: Sự khác biệt giữa 'return false;' và 'e.preventDefault ();'

Ý chính của bài viết của ông là:

hàm () {trả về false; }

// BẰNG

hàm (e) {e.preventDefault (); e.stopPropagation (); }

mặc dù tôi vẫn khuyên bạn nên đọc toàn bộ bài viết

Cập nhật: Sau khi tranh luận về việc sử dụng return false; thay thế cho e.preventDefault (); & e.stopPropagation (); một trong những đồng nghiệp của tôi đã chỉ ra rằng return false cũng dừng thực thi gọi lại, như được nêu trong bài viết này: jQuery Events: Stop (Mis) Sử dụng Return false .


Tôi phải chú ý ở đây sau một số bài kiểm tra mã rằng: trong jquery , function() { return false; }LÀ THIẾT BỊ ĐẾN function(e) { e.preventDefault(); e.stopPropagation(); }, nhưng trong js thuần túy, nó không giống nhau, thực sự là function() { return false; }THIẾT BỊ function(e) { e.preventDefault(); }. Nó không ngừng truyền bá.
SkuraZZ


3

Tôi nghĩ rằng một câu hỏi tốt hơn là, tại sao trong trường hợp bạn đang đánh giá một bộ giá trị trả về boolean, bạn sẽ KHÔNG sử dụng true / false ? Ý tôi là, bạn có thể có true / null, true / -1, misc khác. Các giá trị "giả" của Javascript để thay thế, nhưng tại sao bạn lại làm vậy?


1

Khi bạn muốn kích hoạt mã javascript từ thẻ neo, trình xử lý onclick nên được sử dụng thay vì javascript: pseudo-Protocol. Mã javascript chạy trong trình xử lý onclick phải trả về true hoặc false (hoặc một biểu thức so với giá trị đúng hoặc sai) trở lại chính thẻ - nếu nó trả về true, thì HREF của neo sẽ được theo dõi như một liên kết thông thường. Nếu nó trả về false, thì HREF sẽ bị bỏ qua. Đây là lý do tại sao "trả lại sai;" thường được bao gồm ở cuối mã trong trình xử lý onclick.


1

Bạn sử dụng return false để ngăn điều gì đó xảy ra. Vì vậy, nếu bạn có một tập lệnh đang chạy khi gửi thì trả về false sẽ ngăn việc gửi không hoạt động.


1

Khi một câu lệnh return được gọi trong một hàm, việc thực thi hàm này bị dừng lại. Nếu được chỉ định, một giá trị đã cho sẽ được trả về cho người gọi hàm. Nếu biểu thức bị bỏ qua, thay vào đó không xác định được trả về.

Để biết thêm hãy xem trang tài liệu MDN choreturn .


1

trả về false chỉ sử dụng nếu bạn có một số chức năng (bằng một số thử nghiệm) hoặc bạn muốn dừng một số chức năng, ví dụ sử dụng return false trong phần cuối "onsubmit"


1

Ngoài ra, liên kết ngắn và thú vị này để đọc qua https://www.w3schools.com/jsref/event_preventdefault.asp

Định nghĩa và cách sử dụng

Phương thức notifyDefault () hủy bỏ sự kiện nếu nó có thể hủy được, nghĩa là hành động mặc định thuộc về sự kiện sẽ không xảy ra.

Ví dụ: điều này có thể hữu ích khi:

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

Lưu ý: Không phải tất cả các sự kiện đều có thể hủy được. Sử dụng thuộc tính có thể hủy để tìm hiểu xem một sự kiện có thể hủy được không.

Lưu ý: Phương thức notifyDefault () không ngăn sự lan truyền thêm của một sự kiện thông qua DOM. Sử dụng phương thức stopPropagation () để xử lý việc này.


Cân nhắc sử dụng: developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault như đối lập với w3schools. Nhưng câu trả lời chắc chắn.
Bibberty
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.