2010-09-24 10 views
37

Tôi có một số liên kết được hiển thị trên một trang. Tôi muốn bật/tắt chúng dựa trên các sự kiện khác trên trang. Có cách nào để làm điều này với jQuery?Làm cách nào để tự động bật/tắt liên kết với jQuery?

+0

bạn đang sử dụng html5? hoặc xhtml? – RobertPitt

+0

@robertpitt tại sao điều đó có liên quan? – Yahel

+1

vì nếu bạn sử dụng html5 thì bạn có thể sử dụng 'data- *' để lưu trữ dữ liệu dưới dạng chuỗi, vì vậy bạn có thể lưu trữ href trong 'data-href' và thay thế hiện tại bằng' # ', sau đó tạo plugin để chuyển đổi điều này, chẳng hạn như '$ ('. disabled'). DisableClick();' bạn có thể làm điều đó với preventDefault nhưng tôi chỉ định giải thích một cách cho html5. – RobertPitt

Trả lời

57
$('selector_for_links_to_disable').bind('click', function(e){ 
     e.preventDefault(); 
}) 

và cho phép:

$('selector_for_links_to_enable').unbind('click') 
+0

Cố gắng hủy liên kết trong khi vẫn là chức năng liên kết không hoạt động. Sau đó, bạn phải sử dụng "return true;". –

4

Bạn có thể làm một cái gì đó như:

$('.links').click(function(e){ 
    if([some conditions]){ 
    e.preventDefault(); 
    } 
}); 

Hãy chắc chắn để chứng minh rằng họ không còn làm việc bằng cách nào đó, nếu không người dùng của bạn sẽ bị lẫn lộn, lol.

2

tùy thuộc vào ý bạn bằng cách "tắt".

này sẽ làm cho họ không làm gì cả:

$("A").click(function() { return false; }); 
+0

Tôi nghĩ OP có nghĩa là thay đổi chúng từ liên kết thành văn bản để chúng không xuất hiện dưới dạng liên kết. Nếu không phát hiện ra! – Chris

+1

return false không được thông báo. Sử dụng e.preventDefault() để thay thế. – dekomote

+0

tốt, bạn học một cái gì đó mới mỗi ngày. cảm ơn. –

1
$(document).delegate('.links', 'click', function() { 
    if ([your condition is true]) { 
    return false; 
    } 
}) 

đoàn là tốt hơn so với bộ xử lý, bởi vì bạn có thể gọi cho họ trước khi dom là được tải

1

Bạn c một làm một cái gì đó như thế này:

<script> 
    $(document).ready(function() { 
     $('input#disableall').live('click', function(){ 
      $('a').attr('class', 'disabled'); 
      alert('All links are disabled.'); 
     }); 


     $('input#enableall').live('click', function(){ 
      $('a').attr('class', 'enabled'); 
      alert('All links are enabled.'); 
     }); 

     $('a.disabled').live('click', function(event){ 
      event.preventDefault(); 
     }); 
    }); 
</script> 

<a href='http://www.google.com'>Google<a/> 
<a href='http://www.yahoo.com'>Yahoo<a/> 
<a href='http://www.hotmail.com'>Hotmail<a/> 

<input type='button' id='disableall' value='Disable Links' /> 
<input type='button' id='enableall' value='Enable Links' /> 
0

Khi tôi đưa ra các chức năng cho nút bằng jquery, tôi muốn làm điều này:

indice = ''; 

$('myLink').live('click',function() { 
    if (indice !== 'value1'){ 

     // your code 
    } 

    indice = 'value1'; 
    return indice; 

}); 

với điều này, bạn sẽ có được chức năng chỉ là lần đầu tiên bạn bấm nút de. Bây giờ, bạn chỉ cần đặt mức độ khác biệt của giá trị1 cho liên kết của bạn hoạt động trở lại