Buat tautan HTML yang tidak melakukan apa-apa (secara harfiah tidak ada)

87

Saya ingin tautan yang tidak melakukan apa-apa. Saya tidak menginginkan ini:

<a href="#">

karena kemudian URL-nya menjadi something.com/whatever/#.

Satu-satunya alasan saya menginginkan link adalah agar pengguna dapat melihat bahwa mereka dapat mengklik teks tersebut. JavaScript digunakan untuk melakukan beberapa tindakan, jadi saya tidak memerlukan tautan untuk pergi ke mana pun tetapi saya membutuhkannya agar terlihat seperti tautan!

Saya dapat menggunakan beberapa atribut data dan memberi tahu saya CSS untuk membuat elemen terlihat seperti tautan jika mereka memiliki atribut ini tetapi tampaknya agak berlebihan.

bir putih
sumber
Ada apa dengan something.com/whatever/#?
Charles Sprayberry
1
Anda bisa memberinya sebuah href kosong dan mengembalikan false di javascript. Tetapi lebih semantik jika Anda hanya mengubah properti kursor ke pointerdalam CSS Anda
JohnP
@CharlesSprayberry: Ada situasi di mana Anda tidak menginginkannya.
PeeHaa
Ini juga akan menjadi pertanyaan yang bagus untuk ditanyakan di ux.stackexchange.com .
1
Pertanyaan ini dibahas lebih mendalam di sini: stackoverflow.com/questions/134845/…
DawnPaladin

Jawaban:

125

Hal berikut akan mencegah href Anda dijalankan

<a href="#" onclick="return false;">

Jika Anda menggunakan jQuery, event.preventDefault()bisa digunakan

Singkat
sumber
Menyebabkan acara onclick tambahan dibatalkan.
Rauli Rajande
6
Penyebab halaman bergulir ke atas.
David Hempy
@DavidHempy Saya tidak mengalami ini. Browser yang mana?
Curt
1
@curt Google Chrome Versi 63.0.3239.84 (Build Resmi) (64-bit) (atau mungkin versi yang sedikit lebih tua dua minggu lalu)
David Hempy
Ini tidak berfungsi untuk plugin wordpress gulir ke id dan tautan akan tetap melakukan sesuatu. Dalam hal ini, itu akan menjadi hal buggy yang akan mengarahkan Anda ke bagian atas halaman.
Jiri Otoupal イ り オ ト ウ パ ー
89

Coba ini:

<a href="javascript:void(0);">link</a>
alexdets
sumber
4
+1 tetapi pertanyaan singkat: apakah ada perbedaan antara javascript:voiddan javascript:void(0)?
Adam Rackis
3
Jika Anda akan mencoba menggunakan javascript: void (0) tanpa param Anda akan memiliki SyntaxError dan semua skrip Anda akan gagal.
alexdets
3
@alexdets javascript:void()akan menjadi SyntaxError, tetapi javascript:voidhanya mengembalikan undefined - sama seperti void(0). Adam, sejauh yang saya tahu, voiddan void(0)secara fungsional setara untuk penggunaan ini. --- edit: meskipun saya melihat komentar lain yang mengisyaratkan itu mungkin memuat ulang halaman ..
andytuba
3
Apakah penting bagaimana Anda memanfaatkan javaScript / javascript / JavaScript / Javascript?
Tim Truston
2
@TechyTimo Tidak kapitalisasi tidak masalah, sebenarnya itu tidak boleh dikapitalisasi. Saya telah mengirimkan suntingan.
Weston Ganger
28

Di HTML5, ini sangat sederhana. Abaikan saja hrefatributnya.

<a>Do Nothing</a>

Dari MDN pada atribut a href tag :

href

Ini adalah satu-satunya atribut yang diperlukan untuk jangkar yang mendefinisikan tautan sumber hypertext, tetapi tidak lagi diperlukan di HTML5.


Bagaimana dengan kursor tangan saat mengarahkan kursor?

Gaya default untuk browser tidak boleh mengubah kursor menjadi pointer, untuk atag dengan no href. Anda dapat mengubah ini secara universal dengan CSS berikut.

a {
    cursor: pointer;
}
<a>Do Nothing</a>

Namun mungkin lebih baik untuk lebih selektif tentangnya, dan menerapkannya hanya ke elemen yang ingin Anda tambahkan pengendali event.


Bagaimana dengan membuatnya fokus pada tab?

Tambahkan saja tabindex="0"ke elemen.

<a tabindex="0">Do Nothing</a>


Apakah masuk akal menggunakan atag tanpa tautan?

Biasanya tidak, mungkin lebih baik menggunakan buttonelemen sebagai gantinya, dan menatanya dengan CSS. Tetapi apa pun yang Anda gunakan, hindari menggunakan elemen arbitrer seperti divjika memungkinkan, karena ini sama sekali bukan semantik.

Alexander O'Mara
sumber
1
Dengan bootstrap 4, tautan yang tidak memiliki href tidak diberi gaya sebagai tautan.
pengguna3413723
13

Jangan menjadikannya sebagai tautan (meskipun lebih disukai untuk melakukannya) dan beri gaya dengan CSS sehingga terlihat seperti tautan:

p.not-a-link { text-decoration: underline; cursor: pointer } 

Atau lebih baik hanya membuat link dan membiarkan fungsi javascript yang digunakan e.preventDefault()untuk mencegah link tersebut.

Tambahkan juga tautan ke hrefsehingga pengguna yang tidak mengaktifkan JS tetap dapat menggunakannya (sebagai cadangan).

PeeHaa
sumber
1
+1 Setelah debat IE5.5 selesai, apakah suatu rentang akan lebih baik daripada p?
amelvin
1
Saya lebih suka rentang. P bisa membuat baris baru, sementara span tidak
Ronnie Oosting
9

<a href="javascript:;">Link text</a> - itulah yang biasanya saya gunakan

Scott Brown
sumber
5
Bukankah ini akan memuat ulang halaman dengan beberapa browser?
Curt
@Curt: Anda benar, salah membaca pertanyaan. Anda mendapat komentar positif :-)
Scott Brown
... dan saya mendapat 2 suara negatif, termasuk satu suara negatif setelah mengeditnya! Keras!
Scott Brown
Hapus kode pertama, lalu saya akan diizinkan untuk menghapus suara negatif saya :) Ini tidak akan membiarkan saya menghapus suara negatif, "terkunci"
Curt
1
Browser mana yang terpengaruh, apakah ini masih menjadi masalah lagi? Ini lebih disukai daripada void(0), karena muncul di bilah status. Saya mengatakan itu karena saya pengguna menandainya sebagai bug / error (yang jelas bukan), jadi menurut saya, hal itu membingungkan mereka.
chunk_split
4

Kita bisa mencapainya dengan menggunakan javascript void yang biasanya melibatkan evaluasi ekspresi dan mengembalikan undefined, termasuk menambahkan javascript:void(0);pada href.

Operator void biasanya digunakan hanya untuk mendapatkan nilai primitif yang tidak ditentukan, biasanya menggunakan "void (0)" (yang setara dengan "void 0"). Dalam kasus ini, variabel global yang tidak ditentukan dapat digunakan sebagai gantinya (dengan asumsi itu belum ditetapkan ke nilai non-default).

a {
  text-decoration: initial;
}
<a href="javascript:void(0);"> This link actually does nothing when clicked</a>

Krafty Coder
sumber
2

Jawaban @ Curt akan berfungsi, tetapi Anda dapat menggunakan gaya kursor dalam css agar terlihat seperti tautan tanpa perlu membuat tautan palsu. Gunakan tangan atau penunjuk tergantung pada kesesuaian browser.

Css penunjuk konforman lintas browser (dari panduan gaya kursor ):

element {
    cursor: pointer;
    cursor: hand;
}
amelvin
sumber
@PeeHaa Cukup gunakan penunjuk hanya jika Anda tidak ingin ini berfungsi di IE5.5 dan sebelumnya!
amelvin
3
Itu yang aku katakan! Tolong jangan sebutkan IE5.5: P Pada catatan yang lebih serius, share IE5.5 adalah 0.17%. Jika orang-orang masih menggunakan versi itu, mereka tidak pantas menjelajah web
PeeHaa
2

salah satu cara yang belum disebutkan adalah dengan mengarahkan href ke lokasi file lokal yang kosong seperti itu

<a href='\\'>my dead link</a>

Mengapa? Jika Anda menggunakan kerangka kerja seperti react atau angular, kompiler akan mengeluarkan beberapa peringatan yang dapat membuat log atau konsol Anda kotor. Teknik ini juga akan mencegah robot atau laba-laba menghubungkan sesuatu secara tidak benar.

1-14x0r
sumber
-1

JANGAN GUNAKAN <a>... sebagai gantinya gunakan <span class='style-like-link'> dan kemudian gunakan kelas untuk menatanya sesuka Anda.

Bryce
sumber
Tidak ada yang salah dengan menggunakan tag jangkar tanpa tautan itu sendiri, belum lagi bahwa ada banyak kasus di mana lebih masuk akal untuk melakukannya, daripada menggantinya dengan tag jangkar semu. Belum lagi menata satu elemen agar terlihat seperti yang lain tetapi diterapkan secara berbeda pasti akan menyebabkan masalah pemeliharaan di masa mendatang
Tim
Sepakat. Itu sepenuhnya tergantung pada kasus penggunaan dan apa yang ingin Anda capai. Saya hanya memberikan ini sebagai jawaban untuk membantu orang lain mengetahui bahwa ini adalah opsi AN.
Bryce
Jika itu masalahnya, saya sarankan mengeditnya untuk menggunakan bahasa yang menunjukkan itu adalah alternatif yang mungkin, daripada menyatakan dalam huruf besar untuk tidak menggunakan tag jangkar standar untuk ini, ketika itu benar-benar valid untuk melakukannya
Tim