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.

Evik James
sumber
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;
});
MSI
sumber
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;
}
mvinayakam.dll
sumber
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>
Shiv Kumar Sah
sumber
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;
}
vitrilo.dll
sumber
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
12
$('a').removeAttr('href')

atau

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

Tergantung situasinya

Ashot
sumber
Menghapus a melalui removeAttr tidak berhasil untuk saya. .removeAttr ("href") awesomealbums.info/?WhoAmI
Evik James
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).

Yevgeniy Afanasyev
sumber
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"); 
Jason MacDonald
sumber
5

Hapus saja hrefatribut dari tag anchor.

Pil Ledakan
sumber
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();
});
Kedar.Aitawdekar
sumber
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.

Polinomial
sumber
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"); 
Pankaj
sumber
4

Tuliskan ini satu baris Kode jQuery

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

jika Anda ingin menulis dalam file css

.hyperlink{
    pointer-events: none;
}
Shaik Md N Rasool
sumber
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>
Muhammad Nasir
sumber
Apa bedanya dengan jawaban Jason MacDonald ?
Semua Pekerja Penting
1

Coba ini:

$('a').contents().unwrap();
Hari Pachuveetil
sumber
apa jangkar memegang aturan gaya yang penting untuk program mereka, ini adalah perbaikan yang mengabaikan css
Trevor Rudolph
1

Cukup di SASS:

.some_class{
     // styles...

     &.active {
       pointer-events:none;
     }
}
Saroj Aryal
sumber
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:;");
Mamba hitam
sumber
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.

GNi33
sumber
-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

Nathre
sumber
3
dinonaktifkan bukanlah atribut yang valid untuk tag <a>
Josepas