Thẻ bị vô hiệu hóa


265

Mặc dù liên kết đó bị vô hiệu hóa, nó vẫn có thể nhấp được.

<a href="/" disabled="disabled">123n</a>

Tôi có thể làm cho nó không thể nhấp nếu nó bị vô hiệu hóa? Tôi có nên sử dụng JavaScript nhất thiết?



Chỉ để làm rõ: Tôi đoán ý của bạn là bạn đã tắt liên kết nhưng sự kiện "nhấp chuột" vẫn kích hoạt?
Levi Hackwith

2
Bạn có thể sử dụng các sự kiện con trỏ: none; trong css
ppsreejith

3
Bạn có thể sử dụng ngăn chặnDefault (); stackoverflow.com/questions/1357118/ cường
Ciack404

Nhưng tại sao không loại bỏ thuộc tính href?
MrBoJangles

Câu trả lời:


234

Không có thuộc tính bị vô hiệu hóa cho các siêu liên kết. Nếu bạn không muốn một cái gì đó được liên kết thì bạn sẽ cần phải xóa <a>hoàn toàn thẻ hoặc xóa hrefthuộc tính của nó .


13
Điều này hoạt động, nhưng tôi sẽ coi nó là UX xấu nếu bạn để lại CSS hiện có trên nó. Người dùng sẽ nhấp vào nó và nghĩ rằng một cái gì đó bị hỏng. Bạn không bao giờ nên cho phép người dùng trở nên bối rối về những gì đang xảy ra.
agm1984

Chỉ cần thêm con trỏ: none; đến liên kết có liên quan dường như đạt được nhiều như con trỏ: none; sự kiện con trỏ: không có; . . . . Ở bất cứ giá nào, nó cho phép tôi thay đổi trang trong một trang web ứng dụng một trang cho tôi.
Thân cây

2
Liên kết vẫn có thể tập trung và "có thể nhấp" (sử dụng Enter) bằng cách sử dụng điều hướng bàn phím ngay cả khi bạn sử dụng con trỏ CSS hoặc các sự kiện con trỏ, điều này có thể xấu nếu bạn đang cố gắng vô hiệu hóa một cái gì đó Hoặc loại bỏ thuộc tính href hoặc biến nó thành một span
Tom Golden

3
Bạn cũng có thể thêm onclick="return false;"vào thẻ neo và có thể thêm một titlethuộc tính giải thích rằng liên kết không hợp lệ.
Craig London

1
Ngoài ra, tôi tin rằng chỉ cần xóa hrefvà bỏ đi <a>sẽ không tuân thủ ADA.
SlothFriend

353

Với sự giúp đỡ của css, bạn sẽ vô hiệu hóa siêu liên kết. Hãy thử dưới đây

a.disabled {
  pointer-events: none;
  cursor: default;
}
<a href="link.html" class="disabled">Link</a>


4
Xin lưu ý rằng điều này chỉ hoạt động trong Internet Explorer 11+
Patrick Hillert

31
Khi tập trung vào thẻ liên kết bằng phím tab và nhấn Enter thuộc tính này không hoạt động.
Majid Basirati

2
Chỉ nên là câu trả lời nếu bạn không quan tâm đến IE9-10
Ringo

1
Điều này cũng vô hiệu hóa sự kiện di chuột, có nghĩa là kiểu con trỏ không hoạt động. (<span> & # x20E0; </ span> <- không ai trong số này trên liên kết bị vô hiệu hóa của bạn.)
Seth Battin

2
cũng sử dụng độ mờ để phân biệt giữa các liên kết hoạt động và vô hiệu hóa. opacity: 0.5;
Aamer Shahzad

84

Bạn có thể dùng:

<a href="/" onclick="return false;">123n</a>

2
sẽ không hoạt động nếu đã có chức năng xử lý sự kiện nhấp chuột
rahul shukla

70

Bạn có thể sử dụng một trong những giải pháp sau:

HTML

<a>link</a>

JavaScript

<a href="javascript:function() { return false; }">link</a>
<a href="/" onclick="return false;">link</a>

CSS

<a href="www.page.com" disabled="disabled">link</a>

<style type="text/css">
    a[disabled="disabled"] {
        pointer-events: none;
    }
</style>


32

Thử cái này:

<a href="javascript:void(0)" style="cursor: default;">123n</a>

Đúng, tôi luôn sử dụng href = "javascript: void (0)"
Jan Hamara

Đây cũng là một liên lạc tốt đẹp, nếu bạn vẫn muốn giữ lại chức năng nhấp chuột phải như "sao chép liên kết"
Nhà phát triển SPM

18

Các <a>thẻ không có một disabledthuộc tính, đó là chỉ dành riêng cho <input>s (và <select>s và<textarea> s).

Để "vô hiệu hóa" một liên kết, bạn có thể xóa hrefthuộc tính của nó hoặc thêm một trình xử lý nhấp chuột trả về sai.


@rocket Có bất kỳ ý nghĩa nào trong việc loại bỏ thuộc tính href không? Ý tôi là, nó được coi là một thuộc tính bắt buộc. Không phải thứ đó dường như là vấn đề ngày nay.
Ringo

@Ringo: Loại bỏ hrefcó thể làm cho con trỏ không thay đổi khi bạn di chuột qua nó.
Tên lửa nguy hiểm

11

Bạn cần phải xóa <a>thẻ để thoát khỏi điều này.

hoặc thử sử dụng: -

  <a href="/" onclick="return false;">123n</a>

10

HTML:

<a href="/" class="btn-disabled" disabled="disabled">123n</a>

CSS:

.btn-disabled,
.btn-disabled[disabled] {
  opacity: .4;
  cursor: default !important;
  pointer-events: none;
}

10

Mẹo 1: Sử dụng CSS pointer-events: none;

Mẹo 2: Sử dụng JavaScript javascript:void(0) (Đây là cách thực hành tốt nhất)

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

Mẹo 1: Sử dụng Jquery $('selector').attr("disabled","disabled");


9

Chỉ CSS: điều này loại bỏ liên kết từ href.

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

5

Để cha mẹ có pointer-events: nonethể vô hiệu hóa đứa trẻ a-tagnhư thế này (yêu cầu div bao gồm a và không 0 chiều rộng / chiều cao):

<div class="disabled">
   <a href="/"></a>
</div>

Ở đâu:

.disabled {
    pointer-events: none;
}

Ví dụ, bạn cũng có thể áp dụng kiểu "con trỏ sự kiện: không" cho thẻ <a> bằng cách thêm lớp .disables bằng javascript khi bạn muốn tắt nó. Một gói <div> là không cần thiết.
Les Nightingill

Gói không yêu cầu như được trình bày ở đây: https://jsfiddle.net/d1owm1d0/1/ cho chrome, firefox và safari. Bạn đang sử dụng một trình duyệt khác, nơi bản demo của tôi thất bại?
Les Nightingill

@LesNightingill Nếu thẻ a kết thúc một cái gì đó nó không hoạt động: jsfiddle.net/d9gwgdyf
Ferus

đó là chính xác @Ferus. Tôi không chắc tại sao điều đó lại đúng.
Les Nightingill

4
$(document).ready(function() {
   $('a').click(function(e) {
     e.preventDefault();
  });
});

1
Mã này đang hoạt động trên nhấp chuột phải. Vì vậy, đây không phải là một giải pháp chính xác.
Lakhan

4

bạn có thể vô hiệu hóa liên kết bằng cách sử dụng javascript trong thời gian chạy bằng cách sử dụng mã này

$ ('. page-link'). css ("con trỏ sự kiện", "không");


Đến bữa tiệc muộn, nhưng điều này cũng loại bỏ bất kỳ con trỏ css nào. Trong trường hợp của tôi, tôi sử dụng "con trỏ: không được phép" nếu liên kết bị tắt.
Steve


3

Bạn có thể mô phỏng thuộc tính bị vô hiệu hóa trên <a>thẻ.

<a href="link.html" disabled="">Link</a>

a[disabled] {
   pointer-events: none;
   cursor: default;
}


3

Tôi có một:

<a href="#">This is a disabled tag.</a>

Hy vọng nó sẽ giúp bạn;)


1
Xin chào Werenverlivitz, chào mừng. Thật tuyệt, không nghĩ rằng bạn sẽ là người đầu tiên có câu trả lời như vậy 7-8 năm sau!
Tiago Martins Peres

2

Chúng tôi không thể vô hiệu hóa nó trực tiếp nhưng chúng tôi có thể làm như sau

  1. thêm vào type="button" .
  2. gỡ bỏ href="" thuộc tính.
  3. thêm disabledthuộc tính để nó hiển thị rằng nó bị vô hiệu hóa bằng cách thay đổi trình duyệt và nó bị mờ đi.

sau đây là một ví dụ

<?php
if($status=="Approved"){ 
?>
  <a type="button" class="btn btn-primary btn-xs" disabled> EDIT
     </a>
  <?php    
}else{
?>
  <a href="index.php" class="btn btn-primary btn-xs"> EDIT
    </a>
  <?php    
}
?>

2

Tôi đã có thể đạt được kết quả mong muốn bằng cách sử dụng thao tác ng-href ternary

<a ng-href="{{[condition] ? '' : '/'}}" ng-class="{'is-disabled':[condition]}">123n</a>

Ở đâu

a.is-disabled{
   color: grey;
   cursor: default;

   &:hover {
      text-decoration: none;
   }
} 

1

Sử dụng các nút và liên kết chính xác.

• Các nút kích hoạt chức năng kịch bản trên một trang web (hộp thoại, mở rộng / thu gọn vùng).

• Liên kết đưa bạn đến một vị trí khác, đến một trang khác hoặc vị trí khác trên cùng một trang.

Nếu bạn tuân theo các quy tắc này, sẽ không có bất kỳ kịch bản nào khi bạn cần tắt liên kết. Ngay cả khi bạn tạo một liên kết trông bị vô hiệu hóa và onclick trống

<a href="" ng-click="Ctrl._isLinkActive && $ctrl.gotoMyAwesomePage()"

Bạn sẽ không xem xét khả năng truy cập và trình đọc màn hình sẽ đọc nó dưới dạng liên kết và những người khiếm thị sẽ tiếp tục tự hỏi tại sao liên kết không hoạt động.


1

Nếu bạn đang sử dụng WordPress, tôi đã tạo một plugin có thể làm điều này & hơn thế nữa mà không cần biết cách mã hóa bất cứ điều gì. Tất cả những gì bạn cần làm là thêm bộ chọn của (các) liên kết mà bạn muốn tắt và sau đó chọn "Tắt tất cả các liên kết với bộ chọn này trong một tab mới." từ menu thả xuống xuất hiện và nhấp vào cập nhật.

Nhấn vào đây để xem một gif chứng minh điều này

Bạn có thể lấy phiên bản miễn phí từ kho lưu trữ Plugin WordPress.org để dùng thử.


1

Dưới đây là nhiều cách khác nhau để vô hiệu hóa thẻ:

<a >Link Text</a> remove the href from your anchor tag
<a href=”javascript:void(0)”/>Link text</a> put javascript:void(0) in href
<a href="/" onclick="return false;">Link text</a> using return false

Vì không có thuộc tính bị vô hiệu hóa cho thẻ neo. Nếu bạn muốn dừng hành vi thẻ neo bên trong hàm jQuery, bạn có thể sử dụng dòng dưới đây khi bắt đầu hàm:

$( "a" ).click(function( e ) {
e.preventDefault();
$( "<div>" )
.append( "default " + e.type + " prevented" )
.appendTo( "#log" );
});

event.preventDefault ()


1

Tôi thấy đã có rất nhiều câu trả lời được đăng ở đây, nhưng tôi không nghĩ có câu trả lời rõ ràng nào kết hợp các cách tiếp cận đã được đề cập vào phương pháp mà tôi đã tìm thấy để làm việc. Điều này là để làm cho cả hai liên kết dường như bị vô hiệu hóa, và cũng không chuyển hướng người dùng đến một trang khác.

Câu trả lời này giả định rằng bạn đang sử dụng jquerybootstrap và sử dụng một thuộc tính khác để tạm thời lưu trữ hreftài sản trong khi bị vô hiệu hóa.

//situation where link enable/disable should be toggled
function toggle_links(enable) {
    if (enable) {
        $('.toggle-link')
        .removeClass('disabled')
        .prop('href', $(this).attr('data-href'))
    }
    else {
        $('.toggle-link')
        .addClass('disabled')
        .prop('data-href', $(this).prop('href'))
        .prop('href','#')
    }
a.disabled {
  cursor: default;
}

0

Mọi thứ trong thẻ href sẽ hiển thị ở phía dưới bên trái của cửa sổ trình duyệt khi bạn di chuột qua nó.

Cá nhân tôi nghĩ rằng có một cái gì đó như javascript: void (0) được hiển thị cho người dùng là ghê tởm.

Thay vào đó, hãy tắt href , thực hiện phép thuật của bạn với jQuery / bất cứ điều gì khác và thêm quy tắc kiểu (nếu bạn vẫn cần nó trông giống như một liên kết):

a {
    cursor:pointer;
}

0

Câu trả lời tốt nhất luôn luôn là đơn giản nhất. Không cần bất kỳ mã hóa.

Nếu thẻ neo (a) có thuộc tính no href, thì đó chỉ là một trình giữ chỗ cho một siêu liên kết. Được hỗ trợ bởi tất cả các trình duyệt!

<a href="/">free web counters</a><br  />
<a "/">free web counters</a>


-1

Bạn có thể vô hiệu hóa các thẻ neo bằng cách trả về false. Trong trường hợp của tôi, tôi đang sử dụng angular và ng-tật cho một hiệp ước Jquery và tôi cần phải vô hiệu hóa các phần.

Vì vậy, tôi đã tạo một đoạn js nhỏ để sửa lỗi này.

       <a class="opener" data-toggle="collapse"
                   data-parent="#shipping-detail"
                   id="shipping-detail-section"
                   href="#shipping-address"
                   aria-expanded="true"
                   ng-disabled="checkoutState.addressSec">
                   Shipping Address</a>
     <script>
          $("a.opener").on("click", function () {
           var disabled = $(this).attr("disabled");
           if (disabled === 'disabled') {
            return false;
           }
           });
     </script>

-1

nếu bạn chỉ muốn tạm thời vô hiệu hóa liên kết nhưng để lại href ở đó để bật sau (đó là điều tôi muốn làm) tôi thấy rằng tất cả các trình duyệt đều sử dụng đầu tiên. Do đó tôi đã có thể làm:

<a class="ea-link" href="javascript:void(0)" href="/export/">Export</a>

Đây là HTML không hợp lệ, như được mô tả tại stackoverflow.com/q/26341507/1709587 . Nếu động lực của bạn chỉ là để giữ xung quanh trong mã nguồn của bạn để dễ dàng chỉnh sửa nguồn của bạn sau này để khôi phục nó, có nhiều cách để làm điều đó không liên quan đến việc vi phạm thông số kỹ thuật, như sử dụng nhận xét. Tôi khuyên bạn không nên viết HTML không hợp lệ như thế này mà không có lý do chính đáng để làm như vậy.
Đánh dấu Amery

-1

Biến thể phù hợp với tôi:

<script>
  function locker(){
    if ($("a").hasClass("locked")) {
         $("a").removeClass('locked').addClass('unlocked');
         $("a").attr("onClick","return false");
    } else {
         $("a").css("onclick","true");
         $("a").removeClass('unlocked').addClass('locked');
         $("a").attr("onClick","");
    }
  }
</script>

<button onclick="locker()">unlock</button>

<a href="http://some.site.com" class="locked">
  <div> 
      .... 
  <div>
</a>

-1

<a href="/" disabled="true" onclick="return false">123</a>

Chỉ cần thêm: Điều này nói chung hoạt động, tuy nhiên nó sẽ không hoạt động nếu người dùng đã tắt javascript trong trình duyệt.

1) Bạn có thể tùy ý sử dụng lớp Bootstrap 3 trên thẻ neo của mình để tắt thẻ href, sau khi tích hợp plugin bootstrap 3

<a href="/" class="btn btn-primary disabled">123n</a>

Hoặc là

2) Tìm hiểu cách bật javascript bằng html hoặc js trong trình duyệt. hoặc tạo một cửa sổ bật lên thông báo cho người dùng kích hoạt javascript bằng cách sử dụng trước khi sử dụng trang web

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.