2012-06-25 25 views
39

Tôi có nhấn sự kiện thiết lập như thế này:trả về false từ jQuery nhấp chuột kiện

$('.dialogLink') 
    .click(function() { 
     dialog(this); 
     return false; 
    }); 

Các tất cả đều có một "return false"

Ai đó có thể giải thích điều này không và nếu nó là cần thiết?

Trả lời

75

Khi bạn trả về false từ trình xử lý sự kiện, ngăn chặn hành động mặc định cho sự kiện đó và dừng sự kiện phát sinh thông qua DOM. Có nghĩa là, nó là tương đương để làm điều này:

$('.dialogLink') 
    .click(function (event) { 
     dialog(this); 
     event.preventDefault(); 
     event.stopPropagation(); 
}); 

Nếu '.dialogLink' là một yếu tố <a> sau đó hành động mặc định của nó trên nhấp chuột là để điều hướng đến href. Trả lại false từ trình xử lý nhấp chuột sẽ ngăn điều đó.

Để biết liệu nó có cần thiết trong trường hợp của bạn hay không, tôi đoán câu trả lời là có bởi vì bạn muốn hiển thị hộp thoại để phản hồi nhấp chuột thay vì điều hướng. Nếu phần tử bạn đã đặt trình xử lý nhấp chuột không có hành động mặc định khi nhấp chuột (ví dụ: thông thường không có gì xảy ra khi bạn nhấp vào div) thì bạn không cần phải trả về false vì không có gì để hủy.

Nếu bạn muốn làm điều gì đó để phản hồi nhấp chuột nhưng hãy để điều hướng mặc định tiếp tục, sau đó không trả về false.

Tiếp tục đọc:

+0

Nó sẽ giống nhau nếu tôi được mã hóa trong hai sự kiện đó vào hàm hộp thoại? – Alan2

+1

Hai dòng này không phải là sự kiện, chúng gọi các phương thức của đối tượng 'event' mà bạn sẽ nhận thấy tôi đã thêm vào như một tham số cho hàm. jQuery đặt tham số đó thành đối tượng 'event' được kết hợp với bất kỳ sự kiện nào xảy ra.Nếu bạn đã chuyển đối tượng 'event' cho hàm' dialog() 'thì nó có thể gọi những phương thức đó, nhưng tôi nghĩ nó có thể duy trì được nhiều hơn nếu bạn làm điều đó trực tiếp nơi tôi đã hiển thị nó. Có nói rằng, tôi khuyên bạn nên gắn bó với 'return false' bạn đã có: nó ngắn hơn. – nnnnnn

+0

Là một người chỉ gặp vấn đề này và phải mất một chút để nhận ra những gì đang diễn ra, tôi sẽ tranh luận gọi là 'return false' không rõ ràng như nói để ngăn chặnDefault và stopPropagation. – aug

3

Giá trị trả về của phương thức thụ lý sự kiện xác định có hay không hành vi trình duyệt mặc định nên diễn ra là tốt. Trong trường hợp nhấp vào liên kết, điều này sẽ theo liên kết, nhưng sự khác biệt là đáng chú ý nhất trong trình xử lý gửi biểu mẫu, nơi bạn có thể hủy gửi biểu mẫu nếu người dùng đã nhầm lẫn khi nhập thông tin.

Tôi không tin rằng có thông số W3C cho việc này. Tất cả các giao diện JavaScript cổ xưa như thế này đã được đặt biệt danh là "DOM 0" và hầu như không được chỉ định. Bạn có thể có một số may mắn đọc tài liệu Netscape 2 cũ.

Cách hiện đại để đạt được hiệu ứng này là gọi event.preventDefault() và điều này được chỉ định trong DOM 2 Events specification.

Vì vậy, đúng cách sẽ là:

$('.dialogLink') 
    .click(function (e) { 
     dialog(this); 
     e.preventDefault(); 
     e.stopPropagation(); // Stop bubbling up 
}); 
+0

Bạn đề cập đến cách "hiện đại" nhưng nếu nó chỉ giống nhau thì không tốt hơn để trả về mã sai và lưu một số byte từ tập lệnh :-) – Alan2

+0

Nếu đó là trình xử lý sự kiện jQuery, bạn có thể chắc chắn rằng 'return false' sẽ thực hiện công việc. – nnnnnn

+0

Đồng ý với @nnnnnn. –

0

Giá trị trả về của phương thức thụ lý sự kiện xác định có hay không hành vi trình duyệt mặc định nên diễn ra là tốt. Trong trường hợp nhấp vào liên kết, điều này sẽ theo liên kết, nhưng sự khác biệt là đáng chú ý nhất trong trình xử lý gửi biểu mẫu, nơi bạn có thể hủy gửi biểu mẫu nếu người dùng đã nhầm lẫn khi nhập thông tin.

Các vấn đề liên quan