Anda tidak dapat menonaktifkan tautan (dengan cara portabel). Anda dapat menggunakan salah satu teknik ini (masing-masing dengan kelebihan dan kekurangannya sendiri).
Cara CSS
Ini harus menjadi cara yang benar (tetapi lihat nanti) untuk melakukannya ketika sebagian besar browser akan mendukungnya:
a.disabled {
pointer-events: none;
}
Itu yang, misalnya, Bootstrap 3.x lakukan. Saat ini (2016) hanya didukung oleh Chrome, FireFox, dan Opera (19+). Internet Explorer mulai mendukung ini dari versi 11 tetapi tidak untuk tautan namun tersedia di elemen luar seperti:
span.disable-links {
pointer-events: none;
}
Dengan:
<span class="disable-links"><a href="#">...</a></span>
Penanganan masalah
Kami, mungkin, kebutuhan untuk mendefinisikan kelas CSS untuk pointer-events: nonetetapi bagaimana jika kita menggunakan kembali dengan disabledatribut bukan kelas CSS? Sebenarnya disabledtidak didukung untuk <a>tetapi browser tidak akan mengeluh untuk atribut yang tidak diketahui . Menggunakan disabledatribut IE akan mengabaikan pointer-eventstetapi akan menghormati disabledatribut spesifik IE ; browser yang sesuai dengan CSS lainnya akan mengabaikan atribut dan kehormatan yang tidak diketahui . Lebih mudah menulis daripada menjelaskan:disabledpointer-events
a[disabled] {
pointer-events: none;
}
Opsi lain untuk IE 11 adalah mengatur displayelemen tautan ke blockatau inline-block:
<a style="pointer-events: none; display: inline-block;" href="#">...</a>
Perhatikan bahwa ini mungkin solusi portabel jika Anda perlu mendukung IE (dan Anda dapat mengubah HTML) tetapi ...
Semua ini mengatakan harap dicatat bahwa pointer-eventsmenonaktifkan hanya ... acara pointer. Tautan masih dapat dinavigasi melalui keyboard maka Anda juga perlu menerapkan salah satu teknik lain yang dijelaskan di sini.
Fokus
Sehubungan dengan teknik CSS yang dijelaskan di atas, Anda dapat menggunakan tabindexcara yang tidak standar untuk mencegah elemen menjadi terfokus:
<a href="#" disabled tabindex="-1">...</a>
Saya tidak pernah memeriksa kompatibilitasnya dengan banyak browser maka Anda mungkin ingin mengujinya sendiri sebelum menggunakan ini. Ini memiliki keuntungan untuk bekerja tanpa JavaScript. Sayangnya (tapi jelas) tabindextidak dapat diubah dari CSS.
Mencegah klik
Gunakan hreffungsi a to JavaScript, periksa kondisinya (atau atribut yang dinonaktifkan itu sendiri) dan jangan lakukan apa-apa.
$("td > a").on("click", function(event){
if ($(this).is("[disabled]")) {
event.preventDefault();
}
});
Untuk menonaktifkan tautan, lakukan ini:
$("td > a").attr("disabled", "disabled");
Untuk mengaktifkannya kembali:
$("td > a").removeAttr("disabled");
Jika Anda ingin, alih-alih .is("[disabled]")Anda dapat menggunakan .attr("disabled") != undefined(jQuery 1.6+ akan selalu kembali undefinedketika atribut tidak disetel) tetapi is()jauh lebih jelas (terima kasih kepada Dave Stewart untuk tip ini). Harap dicatat di sini saya menggunakan disabledatribut dengan cara yang tidak standar, jika Anda peduli dengan ini, maka ganti atribut dengan kelas dan ganti .is("[disabled]")dengan .hasClass("disabled")(menambah dan menghapus dengan addClass()dan removeClass()).
Zoltán Tamási mencatat dalam komentar bahwa "dalam beberapa kasus acara klik sudah terikat dengan beberapa fungsi" nyata "(misalnya menggunakan knockoutjs). Dalam hal ini, penangan event handler dapat menyebabkan beberapa masalah. Karenanya saya menerapkan tautan yang dinonaktifkan dengan mengikat pengembalian handler palsu ke tautan touchstart, mousedowndan keydownacara. Ada beberapa kelemahan (ini akan mencegah pengguliran sentuh dimulai pada tautan) " tetapi menangani acara keyboard juga memiliki manfaat untuk mencegah navigasi keyboard.
Perhatikan bahwa jika hreftidak dihapus, mungkin pengguna dapat mengunjungi halaman itu secara manual.
Kosongkan tautannya
Hapus hrefatributnya. Dengan kode ini Anda tidak menambahkan pengendali acara tetapi Anda mengubah tautannya sendiri. Gunakan kode ini untuk menonaktifkan tautan:
$("td > a").each(function() {
this.data("href", this.attr("href"))
.attr("href", "javascript:void(0)")
.attr("disabled", "disabled");
});
Dan ini untuk mengaktifkannya kembali:
$("td > a").each(function() {
this.attr("href", this.data("href")).removeAttr("disabled");
});
Secara pribadi saya tidak terlalu menyukai solusi ini (jika Anda tidak perlu berbuat lebih banyak dengan tautan yang dinonaktifkan) tetapi mungkin lebih kompatibel karena berbagai cara untuk mengikuti tautan.
Penangan klik palsu
Tambah / hapus onclickfungsi tempat Anda return false, tautan tidak akan diikuti. Untuk menonaktifkan tautan:
$("td > a").attr("disabled", "disabled").on("click", function() {
return false;
});
Untuk mengaktifkannya kembali:
$("td > a").removeAttr("disabled").off("click");
Saya tidak berpikir ada alasan untuk memilih solusi ini daripada yang pertama.
Styling
Styling bahkan lebih sederhana, solusi apa pun yang Anda gunakan untuk menonaktifkan tautan yang kami tambahkan disabledatribut sehingga Anda dapat menggunakan aturan CSS berikut:
a[disabled] {
color: gray;
}
Jika Anda menggunakan kelas alih-alih atribut:
a.disabled {
color: gray;
}
Jika Anda menggunakan kerangka UI, Anda mungkin melihat bahwa tautan yang dinonaktifkan tidak ditata dengan benar. Bootstrap 3.x, misalnya, menangani skenario ini dan tombolnya ditata dengan benar baik dengan disabledatribut maupun dengan .disabledkelas. Sebaliknya, jika Anda menghapus tautan (atau menggunakan salah satu teknik JavaScript lainnya), Anda juga harus menangani gaya karena <a>tanpanya hrefmasih dicat sebagaimana diaktifkan.
Aplikasi Internet Kaya yang Dapat Diakses (ARIA)
Jangan lupa juga menyertakan atribut aria-disabled="true"bersamaan dengan disabledatribut / kelas.