2012-09-13 27 views
6

Vì vậy, tôi có danh sách này với một số hiệu ứng di chuột được thêm thông qua CSS. HTML:Cách giữ các thuộc tính di chuột trong khi tắt nhấp chuột

<li><a href="#">Current Period</a> 
    <ul> 
     <li><a href="#">2012</a> 
     <li> a href="#">2011</a> //...you get the point 

CSS:

#nav a:hover { 
    background-color: #fff; 
    color: #333; 
} 

Khi người dùng di chuột qua giai đoạn hiện nay một danh sách các trẻ em yếu tố xuất hiện (2012, 2011 ... mà có con của riêng mình). Vấn đề của tôi là người dùng có thể nhấp vào "Thời kỳ hiện tại". Tôi đã cố gắng loại bỏ các nhấp chuột bằng cách thêm một lớp học để neo như sau:

<li><a href="#" class="noclick">Current Period</a> .... 

CSS:

.noclick { pointer-events: none; cursor: default; }

nhưng điều này dĩ nhiên loại bỏ các tính năng di chuột. Tôi muốn giữ hiệu ứng di chuột trong khi làm cho nút không thể nhấp (tôi đã suy nghĩ javascript, nhưng tôi muốn có một giải pháp "trực tiếp" hơn). Tôi đánh giá cao bất kỳ trợ giúp nào :)

Trả lời

1

Trong thử nghiệm xử lý nhấp chuột của bạn cho dù mục nhấp có lớp rằng:

$("#nav a").click(function(e){ 
    if ($(e.target).hasClass("noclick")) 
     return false; 

    // your other code here 
}); 

Lưu ý rằng bằng cách kiểm tra target element cho sự kiện bạn không thì hãy ngăn liếm trên các yếu tố con từ làm việc.

Hoặc nếu lớp "noclick" không được thay đổi động, tức là, các liên kết "noclick" đó bắt đầu bằng và sẽ luôn là "noclick", bạn có thể thay đổi công cụ chọn để trình xử lý nhấp của bạn không bị ràng buộc với các yếu tố cụ thể đó:

$("#nav a").not(".noclick").click(function() { ... 
+0

Đoạn mã đầu tiên làm cho cảm giác hoàn hảo và, cho mục đích của tôi, phù hợp với hóa đơn một cách hoàn hảo. Cảm ơn bạn! Tôi đánh giá cao sự giúp đỡ của bạn :) – Jose

2

Bạn đã thử chưa?

$('.noclick').unbind('click'); 

hoặc

$('.noclick').click(function(e){e.preventDefault();}); 

hoặc

<a href="javascript:void(0);">Text</a> 
+0

Tôi đã thử cả ba, nhưng nhấp chuột vẫn được công nhận bởi hàm javascript. Có một cảm giác câu trả lời là ở đây nhưng tôi đang làm một cái gì đó sai – Jose

+1

Tôi nhận thấy một bình luận về câu trả lời khác, nơi bạn nói rằng bạn có một chức năng khác chụp nhấp chuột. Có nằm trong vấn đề của bạn .. chức năng xung đột. Hãy nhớ rằng bạn không có ngữ cảnh về cách bạn nắm bắt được nhấp chuột đó hiện tại, nhưng giả sử nếu bạn sử dụng jquery một thứ gì đó của nó ở mức độ '$ ('a'). bạn phải làm việc một số logic vào chức năng khác đó là bắt các nhấp chuột ở mức toàn cầu để xem liệu liên kết của bạn đang nhấp vào 'hasClass ('noclick')' và nếu nó không làm những gì bạn muốn nó làm. – chris

+0

Điều đó có ý nghĩa hoàn hảo. Cảm ơn bạn, tôi sẽ cố gắng ngay bây giờ – Jose

0

Bạn có thể sử dụng lớp noClick để ngăn chặn các sự kiện mặc định

('.noclick').on('click' , function(e) { 
    e.preventDefault(); 
}); 
+0

Điều này vô hiệu hóa chức năng khác của tôi (mà kiểm tra xem một phần tử con đã được nhấp) – Jose

1

Chỉ cần thay đổi dòng sau của bạn:

<li><a href="#" class="noclick">Current Period</a> .... 

cho điều này một

<li><a href="#" class="noclick" onclick="return false;">Current Period</a> .... 

và thay đổi css sau đây của bạn:

.noclick { pointer-events: none; cursor: default; } 

cho điều này một

.noclick { cursor: default; } 

rằng nên làm những gì bạn muốn.

+0

Tôi có một chức năng trên nền vẫn nhận ra nhấp chuột vào đối tượng – Jose

0

trên lớp .noclick loại bỏ con trỏ-sự kiện

.noclick { cursor: default; } 

và thêm js để .noclick yếu tố

$('.noclick').each(function() { 
    var $this = $(this); 
    $this.hover(function() { 
     // do something... 
    }); 
    $this.click(function() { 
     return false; 
    }); 
}); 
Các vấn đề liên quan