Bagaimana Anda membuat tautan tautan tidak dapat diklik atau dinonaktifkan?


92

Saya memiliki tautan jangkar yang ingin saya nonaktifkan setelah pengguna mengekliknya. Atau, hapus tag jangkar dari sekitar teks, tapi tetap pertahankan teksnya.

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

Saya dapat melakukan ini dengan mudah menggunakan tombol dengan menambahkan .attr("disabled", "disabled");
Saya berhasil menambahkan properti yang dinonaktifkan, tetapi tautannya masih dapat diklik.
Saya tidak terlalu peduli jika teksnya digarisbawahi atau tidak.

Ada petunjuk?

Saat Anda mengklik musisi yang salah, seharusnya hanya menambahkan "Salah" dan kemudian menjadi tidak dapat diklik.
Ketika Anda mengklik dan Anda benar, itu harus menambahkan "Keren" dan kemudian menonaktifkan semua <a>tag.


hapus bagian href dan tambahkan ke CSS Anda: "cursor: pointer", saya asumsikan Anda memiliki klik $ ('# ThisLink'). atau semacamnya?
Book Of Zeus

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

Adam, solusi ini hampir berhasil. Ini menghilangkan semua teks di dalam tag.
Evik James

Kemungkinan duplikat dari Cara menonaktifkan tautan HTML
Steve Chambers

Jawaban:


12

Saya baru menyadari apa yang Anda minta (saya harap). Inilah solusi yang buruk

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;
});

Ini sebenarnya bisa benar-benar menyelesaikan masalah, semacam ... Daripada .click, gunakan .on pada body dan delegasikan ke 'a [disabled]'. Kemudian letakkan kode css di css yang sebenarnya menggunakan selektor yang sama. Kemudian, mencegah klik sesederhana event.preventDefault () dan mengembalikan false
lassombra

2
Tidak setuju, gunakan CSS "pointer-events: none;" sebaliknya, seperti di pungkas lainnya.
vitrilo

200

Metode terbersih akan menambahkan kelas dengan pointer-events: none saat Anda ingin menonaktifkan klik. Ini akan berfungsi seperti label biasa.

.disableClick{
    pointer-events: none;
}

19
Menggunakan ide ini, cara yang lebih mudah adalah dengan menggunakan [nonaktif] sebagai pemilih untuk css sehingga Anda tidak perlu menambahkan kelas .disableClick ke jangkar
Ferran Salguero

15
Berhati-hatilah karena Anda masih dapat membuka tab ke hal-hal yang dinonaktifkan dengan peristiwa-penunjuk: tidak ada
Mike Mellor

solusi ini bagus untuk saya di peramban modern. saya memiliki tag jangkar yang dapat digunakan yang terikat untuk mengklik peristiwa, dan untuk mencegah spamming mereka sebagai proses mereka melakukan hal mereka saya secara terprogram menambahkan ini dan kemudian menghapusnya ketika proses selesai. memberi tab ke tag jangkar yang dinonaktifkan dalam kasus saya juga bukan masalah, tetapi mungkin untuk orang lain. YMMV
Stephen Tetreault

2
Menggunakan pointer-events:nonejuga akan menonaktifkan cursor, teks judul, dan peristiwa gerakan mouse lainnya.
Keith

nilai none menginstruksikan mouse event untuk pergi "melalui" elemen dan menargetkan apa pun yang "di bawah" elemen itu sebagai gantinya. developer.mozilla.org/en-US/docs/Web/CSS/pointer-events Itu mungkin menjadi masalah pada beberapa tata letak
pengguna2988142

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

8
Harap jelaskan solusi Anda sehingga pengunjung selanjutnya dari pertanyaan ini akan memahami bagaimana solusi tersebut menyelesaikan masalah yang dihadapi.
War10ck

3
Dari: MDN: Operator void . Saat browser mengikuti a javascript: URI, browser mengevaluasi kode di URI dan kemudian mengganti konten halaman dengan nilai yang dikembalikan, kecuali nilai yang dikembalikan adalah undefined. The voidOperator dapat digunakan untuk kembali undefined. Misalnya: <a href="javascript:void(0);"> Click here to do nothing </a> Namun, perhatikan bahwa javascript:protokol pseudo tidak disarankan dibandingkan alternatif lain, seperti pengendali kejadian yang tidak mengganggu.
Lenin

29

Gunakan gaya CSS peristiwa penunjuk . (seperti yang disarankan Jason MacDonald)

Lihat MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events . Ini didukung di sebagian besar browser.

Sederhana menambahkan atribut "nonaktif" ke jangkar akan melakukan pekerjaan jika Anda memiliki aturan CSS global seperti berikut:

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

3
+1 untuk menambahkan gaya melalui atribut [nonaktif] daripada kelas. Perlu dicatat bahwa pointer-events: none; tidak bekerja di versi yang lebih lama dari IE11.
Daniel Tonon

Semua IE memiliki logika kepemilikannya sendiri untuk menonaktifkan jangkar, tombol, dan bahkan elemen lainnya secara default. Solusi ini diperlukan untuk browser non-IE.
vitrilo

3
+1. Supaya saya tidak perlu mencarinya lagi lain kali: javascript yang diperlukan (menggunakan jQuery) akan $("#elementid").attr("disabled", "disabled");. Mungkin juga berguna untuk dimasukkan ke cursor: defaultdalam CSS (seperti yang disarankan oleh Muhammad Nasir).
ASL

Sebuah elemen tidak memiliki atribut yang dinonaktifkan , menggunakannya sebagai pemilih mungkin atau mungkin tidak berfungsi.
RobG

1
Intuitif - solusi yang bagus. Saya benar-benar terkejut menemukan bahwa <a />elemen tidak memiliki atribut yang dinonaktifkan - tampak aneh.
Morvael


10

Bootstrap memberi kita .disabledkelas. Silakan gunakan itu.

Tetapi .disabledkelas hanya berfungsi jika tag 'a' sudah memiliki kelas 'btn'. Ini tidak berfungsi pada tag 'a' lama mana pun. The btnkelas mungkin tidak sesuai dalam beberapa konteks karena memiliki konotasi gaya. Di bawah sampul, .disabledkelas diatur pointer-eventske none, sehingga Anda dapat membuat CSS untuk melakukan hal yang sama seperti yang disarankan Saroj Aryal dan Vitrilo. (Terima kasih, Les Nightingill atas saran ini).


3
kelas .disabled hanya berfungsi jika tag 'a' sudah memiliki kelas 'btn'. Ini tidak berfungsi pada tag 'a' lama mana pun. Kelas 'btn' mungkin tidak sesuai dalam beberapa konteks karena memiliki konotasi gaya. Di bawah sampulnya, kelas .disabled menetapkan pointer-event ke none, sehingga Anda dapat membuat css untuk melakukan hal yang sama seperti yang disarankan Saroj Aryal dan Vitrilo.
Les Nightingill

Terima kasih atas komentar rinci Anda. Ini menjelaskan banyak hal bagi banyak pengguna. Bolehkah saya menggunakan beberapa teks dari komentar Anda untuk memperluas jawaban saya?
Yevgeniy Afanasyev

9

Tambahkan csskelas:

.disable_a_href{
    pointer-events: none;
}

Tambahkan ini jquery:

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

5

Hapus saja hrefatribut dari tag anchor.


2
Di beberapa browser, menghapus href hanya menyetel href ke / atau halaman ini.
Polinomial

Saya pikir ini harus menjadi pendekatan pertama
Bas Slagter

5

Cara terbaik adalah dengan mencegah tindakan default. Dalam kasus tag jangkar, perilaku default mengarahkan ke hrefalamat yang ditentukan.

Jadi, javascript berikut berfungsi paling baik dalam situasi ini:

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

4

Anda dapat menggunakan acara onclick untuk menonaktifkan tindakan klik:

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

Atau Anda bisa menggunakan sesuatu selain <a>tag.


Anda dapat menggabungkan ini dengan text-decoration: nonedan .disabledLink { color: #000 !important; }membuatnya tampak seperti teks biasa.
Polinomial

1
javascript yang menonjol adalah solusi yang buruk.
jahrichie

4

Komentar Jason MacDonald berhasil untuk saya, diuji di Chrome, Mozila, dan IE.

Menambahkan warna abu-abu untuk menunjukkan efek menonaktifkan.

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

Jquery hanya memilih elemen pertama dalam daftar jangkar, menambahkan karakter meta (*) untuk memilih dan menonaktifkan semua elemen dengan id #ThisLink.

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

4

Tuliskan ini satu baris Kode jQuery

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

jika Anda ingin menulis dalam file css

.hyperlink{
    pointer-events: none;
}

3

Buat kelas berikut dalam style sheet:

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

Tambahkan kelas ini kepada Anda tautan secara dinamis sebagai berikut.

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

    //   or using jquery
<script>
    $('#elemID').addClass('ThisLink');
 </script>

Apa bedanya dengan jawaban Jason MacDonald ?
Semua Pekerja Penting


1

Cukup di SASS:

.some_class{
     // styles...

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

Meskipun kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang mengapa dan / atau bagaimana kode ini menjawab pertanyaan akan secara signifikan meningkatkan nilai jangka panjangnya. Harap edit jawaban Anda untuk menambahkan penjelasan.
Toby Speight

1

Ini adalah metode yang saya gunakan untuk menonaktifkan. Semoga bisa membantu.

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

1
Ini adalah solusi yang sederhana dan mudah dan harus diterima!
Si8

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

Ini akan menjadi cara lain untuk melakukan ini, penangan dengan return false, yang akan menonaktifkan tautan, akan ditambahkan setelah satu klik.


-4

Cara termudah

Di html Anda:

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

Di js Anda:

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

Jika Anda menggunakannya sebagai atribut bekerja dengan sempurna


3
dinonaktifkan bukanlah atribut yang valid untuk tag <a>
Josepas
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.