2011-01-31 25 views
6

Mục đích là vô hiệu hóa tất cả các liên kết, khi một được bấm, và sau đó vô hiệu hóa tất cả các liên kết cho đến khi máy chủ gửi một lệnh không thể hủy (sử dụng một phương pháp tương tự sẽ được sử dụng để vô hiệu hóa).jQuery: làm thế nào để vô hiệu hóa mọi thứ bên trong một div? nhưng vẫn giữ mọi thứ hiển thị?

Vì vậy, vì tất cả các liên kết nằm trong một chứa div, tôi có thể tạm thời vô hiệu hóa tính năng đó.

Tôi sẽ làm như thế nào?

Trả lời

3

Nếu bạn chỉ muốn vô hiệu hóa hành vi liên kết mặc định, bạn có thể sử dụng một sự kết hợp của delegateevent.preventDefault:

$('#container').delegate('a', 'click', function(e) { 
    if (linksDisabled) { 
     e.preventDefault(); 
    } 
}); 

Sau đó bạn có thể thiết lập linksDisabled (trong một phạm vi mẹ) để true hoặc false trong khác của bạn xử lý sự kiện khi thích hợp.

Nếu các liên kết này đang thực hiện những điều Javascripty, điều này sẽ phức tạp hơn một chút. Nó có lẽ sẽ dễ dàng nhất để đặt kiểm tra if (linksDisabled) trong mỗi trình xử lý sự kiện.

+0

Có một lợi thế để sử dụng 'preventDefault()' thay vì 'return false;'? –

+2

@ Lèse majesté Nó cho phép tuyên truyền tiếp tục. Cá nhân tôi thấy nó trực quan hơn. Hơn nữa, nó có thể được gọi bất cứ lúc nào trong trình xử lý sự kiện, thay vì chỉ ở cuối. Điều này không có liên quan ở đây, nhưng tôi thích mã của tôi nhất quán. – lonesomeday

+0

Đó là một điểm tốt. Tôi đã không nghĩ về điều đó. –

2

Hãy thử điều này:

$("#YOUR_DIV a").click(function(){ 
return false; 
}) 
+0

Nếu có các trình xử lý sự kiện khác trên các phần tử, điều này có thể thực thi tốt sau các phần tử khác và do đó không có tác dụng gì cả. – lonesomeday

+0

Đó có thể là một cách hay để vô hiệu hóa các liên kết JavaScript. Tuy nhiên, bạn cần một cách để đảm bảo trình xử lý sự kiện này được kích hoạt trước tiên. –

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