2011-01-04 36 views
36

Tôi chỉ muốn vô hiệu hóa khả năng người dùng nhấp vào một yếu tố trong một số điều kiện. Dưới đây là một số mã tôi đang làm việc với:jquery - vô hiệu hóa nhấp vào

 $('#navigation a').bind('click',function(e){ 

    var $this = $(this); 
    var prev = current; 

    current = $this.parent().index() + 1; // store the position in current 

    if (current == 1){ 
    $("#navigation a:eq(1)").unbind("click"); // i want to disable the ability to click this element if current is 1 
    } 
    if (current >= 2){ 
    $("#navigation a:eq(1)").bind("click"); // this is wrong, but I want to rebind the click if current is greater than 1. 
    } 

}

Trả lời

71

Nếu bạn đang sử dụng phiên bản jQuery 1.4.3+:

$('selector').click(false); 

Nếu không:

$('selector').click(function(){return false;}); 
+13

Có cách nào để chuyển đổi vô hiệu hóa chức năng nhấp chuột thay vì xác định lại nó? –

20

giả sử các sự kiện nhấp chuột của bạn bằng cách sử dụng, chỉ cần bỏ liên kết đó.

dụ

if (current = 1){ 
    $('li:eq(2)').unbind("click"); 
} 

EDIT: Có phải bạn đang ràng buộc một sự kiện click vào danh sách của bạn ở đâu đó? Dựa trên bình luận của bạn ở trên, tôi tự hỏi nếu điều này thực sự là những gì bạn đang làm? Bạn kích hoạt tính năng nhấp chuột như thế nào? Nó chỉ là một cái neo (<a>)? Một chút thông tin rõ ràng hơn sẽ giúp chúng tôi trả lời câu hỏi của bạn.

CẬP NHẬT:

Đã thực hiện một số thao tác với toán tử: eq(). http://jsfiddle.net/ehudokai/VRGfS/5/

Như tôi đã dự kiến, đó là toán tử chỉ mục dựa trên 0. Vì vậy, nếu bạn muốn bật của phần tử thứ hai trong việc lựa chọn của bạn, nơi lựa chọn của bạn là

$("#navigation a") 

bạn sẽ chỉ cần thêm: eq (1) (chỉ số thứ hai) và sau đó .unbind ("click") Vì vậy:

if(current == 1){ 
    $("#navigation a:eq(1)").unbind("click"); 
} 

Cần làm điều này.

Hy vọng điều này sẽ hữu ích!

+0

im ràng buộc nhấp chuột theo cách như sau: $ ('# navigation a'). Bind ('click', function (e) {vì vậy tôi đang sử dụng thẻ scifirocket

+0

Oh, ok, điều đó giúp ích rất nhiều. thực sự đơn giản như việc thêm vào bộ chọn Tôi nghĩ vậy: $ ('# navigation li: eq (2) a'). unbind ('click'); – ehudokai

+0

@scifirocket: Tất nhiên tôi đã sai, nhưng nếu bạn thấy bản cập nhật của tôi ở trên, tôi đã thử nghiệm câu trả lời này :). – ehudokai

5

Bạn có thể sử dụng phương pháp unbind để loại bỏ handler đã được đính kèm ...

if (current = 1){ 
    $('li:eq(2)').unbind('click'); 
} 

Bạn có thể kiểm tra những gì có thể unbind làm gì? Unbind manual

+0

thực sự, tôi có thể cần sử dụng cái gì đó như thế này "$ ('#navigation li: eq (2)'). unbind ('click'), nhưng điều đó không hoạt động hoặc là im cố gắng để vô hiệu hóa sự kiện bấm vào một phần tử cụ thể của một danh sách. – scifirocket

+0

@scifirocket: bạn có đang ràng buộc sự kiện nhấp ở đâu đó trong mã của mình không? Hay bạn chỉ sử dụng một neo mà bạn muốn vô hiệu hóa? – ehudokai

10

Raw Javascript có thể thực hiện điều tương tự khá nhanh chóng thêm:

document.getElementById("myElement").onclick = function() { return false; } 
+1

Tôi giả định rằng đó là lỗi đánh máy, vì vậy tôi đã thêm "#" vào bộ chọn jQuery;) –

+0

Mặc dù ... '.click' sẽ không hoạt động trên đối tượng jQuery. Bạn cần '[0]' hoặc '.get (0)'. –

+0

Cảm ơn! Tôi thường sử dụng JS thô. Hãy để tôi chỉnh sửa. – Ben

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