Làm thế nào để bạn làm cho một liên kết cố định không thể nhấp hoặc bị vô hiệu hóa?


92

Tôi có một liên kết cố định mà tôi muốn vô hiệu hóa khi người dùng nhấp vào nó. Hoặc, xóa thẻ liên kết xung quanh văn bản, nhưng chắc chắn giữ lại văn bản.

<a href='' id='ThisLink'>some text</a>

Tôi có thể thực hiện việc này dễ dàng với một nút bằng cách thêm .attr("disabled", "disabled");
Tôi đã thêm thành công thuộc tính bị vô hiệu hóa, nhưng liên kết vẫn có thể nhấp được.
Tôi thực sự không quan tâm đến việc văn bản có được gạch chân hay không.

Có manh mối nào không?

Khi bạn nhấp vào nhạc sĩ sai, nó sẽ chỉ thêm "Sai" và sau đó không thể nhấp vào.
Khi bạn nhấp và bạn đã chính xác, nó sẽ thêm "Tuyệt vời" và sau đó tắt tất cả <a>các thẻ.


loại bỏ phần href và thêm vào CSS của bạn: "cursor: pointer", tôi giả sử bạn có $ ('# ThisLink'). nhấp chuột hoặc cái gì đó tương tự?
Book Of Zeus

1
$ ("# ThisLink"). Parent (). Find ("a"). Remove ();
Adam Holmes

Adam, giải pháp này gần như hoạt động. Mặc dù vậy, nó sẽ loại bỏ tất cả văn bản trong thẻ.
Evik James

Câu trả lời:


12

Tôi chỉ nhận ra những gì bạn đang yêu cầu (tôi hy vọng). Đây là một giải pháp xấu xí

var preventClick = false;

$('#ThisLink').click(function(e) {
    $(this)
       .css('cursor', 'default')
       .css('text-decoration', 'none')

    if (!preventClick) {
        $(this).html($(this).html() + ' lalala');
    }

    preventClick = true;

    return false;
});

Điều này thực sự có thể giải quyết vấn đề, đại loại là ... Thay vì .click, hãy sử dụng .on trên phần thân và ủy quyền cho 'a [bị tắt]'. Sau đó, đặt mã css trong css thực tế bằng cách sử dụng cùng một bộ chọn. Sau đó, việc ngăn chặn nhấp chuột đơn giản như event.preventDefault () và trả về false
lassombra

2
Không đồng ý, hãy sử dụng CSS "pointer-event: none;" thay vào đó, giống như trong các unswers khác.
vitrilo

200

Phương pháp rõ ràng nhất sẽ là thêm một lớp với sự kiện con trỏ: không có khi bạn muốn tắt một lần nhấp. Nó sẽ hoạt động giống như một nhãn bình thường.

.disableClick{
    pointer-events: none;
}

19
Sử dụng ý tưởng này một cách dễ dàng hơn sẽ được sử dụng một [tắt] như bộ chọn cho css, do đó bạn sẽ không cần thêm các lớp .disableClick để neo
Ferran Salguero

15
Tuy nhiên, hãy cẩn thận vì bạn vẫn có thể chuyển tab đến những thứ bị vô hiệu hóa với sự kiện con trỏ: không có
Mike Mellor

giải pháp này tốt cho tôi trong các trình duyệt hiện đại. Tôi có các thẻ neo có thể sử dụng được liên kết với các sự kiện nhấp chuột và để ngăn chặn việc gửi spam chúng khi các quy trình của họ thực hiện công việc của họ, tôi lập trình thêm thẻ này và sau đó xóa nó khi quá trình hoàn tất. việc gắn thẻ vào một thẻ liên kết bị vô hiệu hóa trong trường hợp của tôi cũng không phải là mối quan tâm, nhưng có thể là đối với những người khác. YMMV
Stephen Tetreault

2
Việc sử dụng pointer-events:nonecũng sẽ tắt cursor, văn bản tiêu đề và các sự kiện di chuột khác.
Keith

giá trị không hướng dẫn sự kiện chuột đi "qua" phần tử và nhắm mục tiêu bất cứ thứ gì "bên dưới" phần tử đó thay thế. developer.mozilla.org/en-US/docs/Web/CSS/pointer-events Đó có thể là một vấn đề trên một số bố trí
user2988142

33
<a href='javascript:void(0);'>some text</a>

8
Vui lòng giải thích giải pháp của bạn để những khách truy cập trong tương lai cho câu hỏi này sẽ hiểu cách nó giải quyết vấn đề hiện tại.
War10ck

3
Từ: MDN: Toán tử void . Khi một trình duyệt tuân theo a javascript: URI, nó sẽ đánh giá mã trong URI và sau đó thay thế nội dung của trang bằng giá trị trả về, trừ khi giá trị trả về là undefined. Các voidnhà điều hành có thể được sử dụng để quay trở lại undefined. Ví dụ: <a href="javascript:void(0);"> Click here to do nothing </a> Tuy nhiên, lưu ý rằng javascript:giao thức giả không được khuyến khích so với các lựa chọn thay thế khác, chẳng hạn như các trình xử lý sự kiện không phô trương.
Lenin

28

Sử dụng kiểu CSS con trỏ-sự kiện . (như Jason MacDonald đã đề xuất)

Xem MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events . Nó được hỗ trợ trong hầu hết các trình duyệt.

Việc thêm đơn giản thuộc tính "bị vô hiệu hóa" vào liên kết sẽ thực hiện công việc nếu bạn có quy tắc CSS chung như sau:

a[disabled], a[disabled]:hover {
   pointer-events: none;
   color: #e1e1e1;
}

3
+1 để thêm kiểu thông qua thuộc tính [đã tắt] thay vì một lớp. Cần lưu ý rằng con trỏ-sự kiện: không có; không hoạt động trong bất kỳ thứ gì cũ hơn IE11.
Daniel Tonon

Tất cả các IE đều có logic độc quyền của riêng nó là vô hiệu hóa anchor, các nút và thậm chí các phần tử khác theo mặc định. Giải pháp này cần thiết cho các trình duyệt không phải IE.
vitrilo

3
+1. Để tôi không phải tra cứu lại vào lần sau: cần có javascript (sử dụng jQuery) $("#elementid").attr("disabled", "disabled");. Cũng có thể hữu ích khi đưa cursor: defaultvào CSS (theo đề xuất của Muhammad Nasir).
ASL

Một phần tử không có thuộc tính bị vô hiệu hóa , việc sử dụng nó làm bộ chọn có thể hoạt động hoặc có thể không hoạt động.
RobG

1
Trực quan - giải pháp tốt. Tôi thực sự ngạc nhiên khi thấy rằng <a />các phần tử không có thuộc tính bị vô hiệu hóa - có vẻ kỳ lạ.
Morvael

12
$('a').removeAttr('href')

hoặc là

$('a').click(function(){ return false})

Nó phụ thuộc vào tình hình


Xóa a thông qua removeAttr không hoạt động đối với tôi. .removeAttr ( "href") awesomealbums.info/?WhoAmI
Evik James

10

Bootstrap cung cấp cho chúng ta .disabledlớp học. Hãy sử dụng nó.

Nhưng .disabledlớp chỉ hoạt động khi thẻ 'a' đã có lớp 'btn'. Nó không hoạt động trên bất kỳ thẻ 'a' cũ nào. Các btnlớp có thể không thích hợp trong một số bối cảnh vì nó có ý nghĩa phong cách. Dưới bìa, .disabledlớp đặt pointer-eventsthành none, vì vậy bạn có thể tạo CSS để làm điều tương tự như Saroj Aryal và Vitrilo đã yêu cầu. (Cảm ơn bạn, Les Nightingill về lời khuyên này).


3
lớp .disabled chỉ hoạt động khi thẻ 'a' đã có lớp 'btn'. Nó không hoạt động trên bất kỳ thẻ 'a' cũ nào. Lớp 'btn' có thể không phù hợp trong một số ngữ cảnh vì nó có nội hàm về kiểu dáng. Dưới vỏ bọc, lớp .disabled đặt con trỏ-sự kiện không có, vì vậy bạn có thể tạo css để làm điều tương tự như Saroj Aryal và Vitrilo đã yêu cầu.
Les Nightingill

Cảm ơn bạn đã bình luận chi tiết của bạn. Nó làm rõ rất nhiều điều cho nhiều người dùng. Tôi có thể sử dụng một số văn bản từ bình luận của bạn để mở rộng câu trả lời của tôi không?
Yevgeniy Afanasyev

9

Thêm một csslớp học:

.disable_a_href{
    pointer-events: none;
}

Thêm cái này jquery:

$("#ThisLink").addClass("disable_a_href"); 

5

Chỉ cần xóa hrefthuộc tính khỏi thẻ liên kết.


2
Trong một số trình duyệt, việc xóa href chỉ đặt href thành / hoặc trang hiện tại.
Đa thức

Tôi nghĩ rằng đây sẽ là phương pháp đầu tiên
Bas Slagter

5

Cách tốt nhất là ngăn chặn hành động mặc định. Trong trường hợp của thẻ liên kết, hành vi mặc định là chuyển hướng đến hrefđịa chỉ được chỉ định.

Vì vậy, javascript sau hoạt động tốt nhất trong tình huống:

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

4

Bạn có thể sử dụng sự kiện onclick để vô hiệu hóa hành động nhấp chuột:

<a href='' id='ThisLink' onclick='return false'>some text</a>

Hoặc bạn chỉ có thể sử dụng thứ gì đó khác ngoài <a>thẻ.


Bạn có thể kết hợp nó với text-decoration: none.disabledLink { color: #000 !important; }để làm cho nó xuất hiện giống như văn bản thông thường.
Đa thức

1
javascript khó chịu là một giải pháp tồi tệ.
jahrichie 19/1213

4

Nhận xét của Jason MacDonald phù hợp với tôi, được thử nghiệm trên Chrome, Mozila và IE.

Đã thêm màu xám để hiển thị hiệu ứng vô hiệu hóa.

.disable_a_href{
    pointer-events: none;
    **color:#c0c0c0 !important;**
}

Jquery chỉ chọn phần tử đầu tiên trong danh sách neo, thêm ký tự meta (*) để chọn và vô hiệu hóa tất cả phần tử có id #ThisLink.

$("#ThisLink*").addClass("disable_a_href"); 

4

Viết một dòng mã jQuery này

$('.hyperlink').css('pointer-events','none');

nếu bạn muốn viết trong tệp css

.hyperlink{
    pointer-events: none;
}


1

Thử đi:

$('a').contents().unwrap();

những gì là neo giữ phong cách quy tắc mà rất cần thiết cho chương trình của họ, đây là một sửa chữa mà không quan tâm đến css
Trevor Rudolph

1

Đơn giản trong SASS:

.some_class{
     // styles...

     &.active {
       pointer-events:none;
     }
}

Mặc dù mã này có thể trả lời câu hỏi, nhưng việc cung cấp thêm ngữ cảnh liên quan đến lý do và / hoặc cách nó trả lời câu hỏi sẽ cải thiện đáng kể giá trị lâu dài của nó. Vui lòng chỉnh sửa câu trả lời của bạn để thêm một số giải thích.
Toby Speight

1

Đây là phương pháp tôi đã sử dụng để vô hiệu hóa.

$("#ThisLink").attr("href","javascript:;");

1
Đây là giải pháp đơn giản và dễ dàng và nên được chấp nhận!
Si8

-1
$('#ThisLink').one('click',function(){
  $(this).bind('click',function(){
    return false;
  });
});

Đây sẽ là một cách khác để thực hiện việc này, trình xử lý return falsesẽ vô hiệu hóa liên kết sẽ được thêm vào sau một cú nhấp chuột.


-4

Cách dễ dàng nhất

Trong html của bạn:

<a id="foo" disabled="true">xxxxx<a>

Trong js của bạn:

$('#foo').attr("disabled", false);

Nếu bạn sử dụng nó vì thuộc tính hoạt động hoàn hảo


3
bị vô hiệu hóa không phải là thuộc tính hợp lệ cho thẻ <a>
Josepas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.