Bagaimana cara membuat anchor tag tidak merujuk apa-apa?

159

Saya menggunakan jQuery, saya perlu membuat beberapa anchor tag tidak melakukan tindakan.

Saya biasanya menulis seperti ini:

<a href="#">link</a>

Namun ini merujuk pada bagian atas halaman!

ahmed
sumber
karena jquery akan menangani acara klik jadi saya ingin tautannya menjadi seperti tautan pencapaian tetapi berlaku seperti fungsi JavaScript
ahmed
1
Seperti disebutkan dalam salah satu jawaban di bawah ini: jika Anda tidak ingin tautan mengarah ke sumber daya, jangan gunakan elemen A.
Mathias Bynens
Jangan gunakan hrefatribut di dalamnya.
vsync

Jawaban:

103

Jika Anda tidak ingin mengarahkannya ke apa pun, Anda mungkin tidak boleh menggunakan <a>tag (anchor).

Jika Anda ingin sesuatu terlihat seperti tautan tetapi tidak bertindak seperti tautan, yang terbaik adalah menggunakan elemen yang sesuai (seperti <span>) dan kemudian gaya menggunakan CSS:

<span class="fake-link" id="fake-link-1">Am I a link?</span>

.fake-link {
    color: blue;
    text-decoration: underline;
    cursor: pointer;
}

Juga, mengingat bahwa Anda menandai pertanyaan ini "jQuery", saya berasumsi bahwa Anda ingin melampirkan hander acara klik. Jika demikian, lakukan hal yang sama seperti di atas dan gunakan sesuatu seperti JavaScript berikut:

$('#fake-link-1').click(function() {
    /* put your code here */
});
Tyson
sumber
37
Ini memiliki masalah: tidak memungkinkan navigasi tab.
6
Perhatikan bahwa (seperti yang ditunjukkan oleh Iraimbilanja) pendekatan span di sini menonaktifkan kemungkinan untuk memanggil fungsi menggunakan keyboard, yang saya anggap sebagai masalah kegunaan.
Fredrik Mörk
3
Juga masalah aksesibilitas. Anda dapat mengatasinya dengan menggunakan elemen tombol (dihasilkan dari JavaScript sehingga pengguna non-JS tidak mendapatkan kontrol yang rusak).
Quentin
4
Berikut ini adalah perbaikan cepat untuk itu: tabindex = "0" pada elemen non-tautan akan memungkinkan navigasi keyboard di sebagian besar browser modern.
Mathias Bynens
1
'Masalah' lain adalah Anda tidak menggunakan CSS: hover pseudo class tidak akan bekerja pada elemen yang tidak memiliki tautan di IE6. Tetapi karena Anda tetap menambahkan elemen-elemen ini melalui JavaScript (setidaknya, Anda harus), Anda bisa juga menulis skrip yang menambahkan kelas .hover ke elemen ketika melayang.
Mathias Bynens
268

Ada beberapa solusi yang kurang sempurna:

1. Tautan ke jangkar palsu

<a href="#">

Masalah: mengklik tautan melompat kembali ke bagian atas halaman

2. Menggunakan tag selain 'a'

Gunakan tag rentang dan gunakan jquery untuk menangani klik

Masalah: istirahat navigasi keyboard, harus secara manual mengubah kursor hover

3. Tautan ke fungsi javascript void

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

Masalah: rusak saat menautkan gambar di IE

Larutan

Karena semua ini memiliki masalah, solusi yang saya pilih adalah dengan menautkan ke jangkar palsu, dan kemudian kembali palsu dari metode onClick:

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

Bukan solusi yang paling ringkas, tetapi ini menyelesaikan semua masalah dengan metode di atas.

zaius
sumber
2
Saya biasanya menggunakan javascript: void (0); pendekatan, karena menggunakan # menampilkan URL saat ini di bilah Firefox di mouse, yang dapat menyesatkan bagi pengguna.
lucaferrario
8
breaks when linking images in IEApa artinya ini?
eugene
14
@ eugene pertanyaan ini sudah berusia 3 tahun sekarang, tetapi IE dulu membuat gambar menghilang ketika dikelilingi oleh tautan ke fungsi yang tidak berlaku. Tidak yakin kapan diperbaiki, tetapi berfungsi di IE10, yang sudah saya instal. Saya pribadi sekarang menggunakan<a href="javascript:;">
zaius
1
Saya telah menggunakan komentar di sana, juga: <a href="javascript:void(0); // Tampilkan palet properti">. Dengan begitu, saat pengguna melayang, mereka melihat komentar yang dapat memberi mereka petunjuk apa yang diharapkan ketika mereka mengklik. (Meskipun Anda bisa menggunakan tooltip juga.)
Robin Zimmermann
5
Tampaknya itu href="javascript:"juga cukup dan berfungsi di browser utama terbaru. Tidak perlu untuk titik koma, bahkan PhpStorm menyarankan untuk menghapusnya.
jlh
40

Untuk membuatnya tidak melakukan apa-apa, gunakan ini:

<a href="javascript:void(0)"> ... </a>
Philippe Leybaert
sumber
1
atau hanya <a href="javascript:;"> . PS tidak bekerja dengan target=_blankmeskipun
Alex
36

Cara yang benar untuk menangani ini adalah "memecah" tautan dengan jQuery ketika Anda menangani tautan tersebut

HTML

<a href="#" id="theLink">My Link</a>

JS

$('#theLink').click(function(ev){
    // do whatever you want here

    ev.preventDefault();
    ev.stopPropagation();
});

Dua panggilan terakhir menghentikan browser yang mengartikan klik.

Oli
sumber
5
Sementara itu terdengar seperti itu "tepat" karena itu berhenti acara menggelegak, "kembali salah" jauh lebih sedikit dan melakukan hal yang sama. Satu-satunya waktu yang ingin Anda lakukan adalah jika Anda sudah memiliki penangan acara terdaftar untuk mengklik tautan melalui jQuery.
aleemb
25

Ada banyak cara untuk melakukannya

Jangan tambahkan dan hrefatribut

<a name="here"> Test <a>

Anda dapat menambahkan onclick event daripada href like

<a name="here" onclick="YourFunction()"> Test <a>

Atau Anda dapat menambahkan fungsi void seperti ini yang akan menjadi cara terbaik

<a href="javascript:void(0);"> 
<a href="javascript:;">
Punit Gajjar
sumber
Apakah diperlukan atribut nama?
Petrus Theron
@PetrusTheron Tidak perlu. .
Punit Gajjar
Ini adalah rip-off dari jawaban yang sudah ada sebelumnya
aross
1
Jangan lupa untuk mengatur gaya tag anchor Anda jika Anda menghapus hrefatribut karena tidak lagi berperilaku seperti hyperlink (meskipun onclick masih berfungsi) Anda harus mengatur ulang hal-hal seperti cursor: pointer;dan :hoverpemilih.
Partack
@Partack Benar. Terima kasih telah memperhatikan
Punit Gajjar
24

Apa yang tidak kamu maksudkan dengan apa pun?

<a href='about:blank'>blank page</a>

atau

<a href='whatever' onclick='return false;'>won't navigate</a>
KristoferA
sumber
1
Setuju - hanya kembalikan salah dari metode jQuery dan voila Anda, itu tidak akan pergi ke mana pun
joshcomley
14

Saya pikir Anda bisa mencoba

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

Satu-satunya tangkapan yang saya lihat di sini adalah keamanan browser tingkat tinggi dapat meminta eksekusi javascript.

Padahal ini adalah salah satu cara yang lebih mudah daripada

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

ini harus digunakan dengan hemat

Baca artikel ini untuk beberapa petunjuk https://web.archive.org/web/20090301044015/http://blog.reindel.com/2006/08/11/a-hrefjavascriptvoid0-avoid-the-void

Rutesh Makhijani
sumber
Jawaban yang benar, memungkinkan navigasi tab.
K - Keracunan dalam SO tumbuh.
14

Jawaban ini harus diperbarui untuk mencerminkan standar web baru (HTML5).

Ini:

<a tabindex="0">This represents a placeholder hyperlink</a>

... adalah HTML5 yang valid. Atribut tabindex menjadikannya keyboard yang fokus seperti hyperlink normal. Anda mungkin juga menggunakan spanelemen untuk ini seperti yang disebutkan sebelumnya, tetapi saya menemukan menggunakan aelemen lebih elegan.

Lihat: https://w3c.github.io/html-reference/a.html
dan: https://html.spec.whatwg.org/multipage/links.html#attr-hyperlink-href

aross
sumber
1
Ini juga HTML4 yang valid, tetapi tidak akan menentukan gaya anchor sebagai tautan.
interjay
1
Saya tidak tahu itu html4 valid, tetapi spec HTML5 secara eksplisit menyebutkan use-case. Dan gaya yang tidak menargetkan atribut href akan berfungsi dengan baik, hanya gaya browser default yang mungkin menjadi masalah.
aross
1
Ini juga tidak memicu clickperistiwa ketika pengguna memfokuskan elemen dan menekan masuk (diuji di Firefox 51).
torvin
@torvin, itu sederhana. Gunakan keydownacara tersebut.
aross
aneh aneh
12

Berikut adalah tiga cara untuk <a>tag hrefproperti tag merujuk kepada apa-apa:

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

<a href="javascript:;">link</a >

<a href="#" onclick="return false;"> Link </a>
Milan Gajjar
sumber
1
Ini hanya duplikat dari jawaban terpilih tertinggi saat ini , tetapi dengan lebih sedikit info
aross
5

Saya tahu ini adalah pertanyaan lama, tapi saya pikir saya akan menambahkan dua sen:

Tergantung pada apa yang akan dilakukan tautan, tetapi biasanya, saya akan mengarahkan tautan ke url yang mungkin menampilkan / melakukan hal yang sama, misalnya, jika Anda membuat sedikit tentang kotak sembulan:

<a id="about" href="/about">About</a>

Lalu dengan jQuery

$('#about').click(function(e) {
    $('#aboutbox').show();
    e.preventDefault();
});

Dengan cara ini, browser yang sangat lama (atau browser dengan JavaScript dinonaktifkan) masih dapat menavigasi ke halaman tentang yang terpisah, tetapi yang lebih penting, Google juga akan mengambil ini dan merangkak konten halaman tentang.

Connell
sumber
5

Pastikan semua tautan yang ingin Anda hentikan href="#!"(atau apa pun yang Anda inginkan, benar-benar), lalu gunakan ini:

jq('body').on('click.stop_link', 'a[href="#!"]',
function(event) {
     event.preventDefault();
});
pacar beruang
sumber
4

Anda dapat memiliki jangkar ( atag) HTML tanpa hrefatribut. Tinggalkan hrefatribut & itu tidak akan terhubung ke apa pun:

<a>link</a>
tee
sumber
Terima kasih! Ini sangat cocok untuk kasus saya. Di mana saya ingin memiliki tag Anchor untuk dibuka di tab baru ketika ada URL, tetapi tidak ada jika tidak ada URL. Dalam hal # itu menerima KLIK dan memindahkannya ke atas halaman. Tidak memiliki bagian href seperti yang Anda sarankan. Itu memecahkan masalah! Pemformatan tampak hebat karena sebuah tag, masalah klik hilang tanpa href. Terima kasih!!!
Mohsin
1
Jika orang lain berpikir kalau itu HTML5 valid, maka jawabannya adalah YA :) stackoverflow.com/a/33046203/5323892 . Ini dari contoh dari halaman standar (lihat item li ke-3): <nav> <ul> <li> <a href="https://stackoverflow.com/"> Beranda </a> </li> <li> <a href = "/ news "> Berita </a> </li> <li> <a> Contoh </a> </li> <li> <a href="https://stackoverflow.com/legal"> Legal </a> </li> </ ul> </nav>
Mohsin
Ini berfungsi tetapi jika Anda ingin pointer mouse berubah menjadi jari, cukup tambahkan href = "JavaScript: void (0)" seperti yang disarankan pada jawaban @Rutesh Makhijani.
Tarik
3

Satu-satunya hal yang berhasil bagi saya adalah kombinasi dari yang di atas:

Pertama li di ul

<li><a onclick="LoadTab2_1()" href="JavaScript:void(0)">All Assigned</a></li>

Kemudian di LoadTab2_1 saya secara manual mengganti div tab

$("#tabs-2-1").hide();
    $("#tabs-2-2").show();

Ini karena pemutusan sambungan juga memutuskan tindakan di tab

Anda juga perlu melakukan penataan tab secara manual saat tab utama mengubah sesuatu

$("#secTab1").addClass("ui-tabs-active").addClass("ui-state-active").addClass("ui-state-hover").addClass("ui-state-focus");
    $("#secTab1 a").css("color", "#ffffff");
tepuk capozzi
sumber
2

Anda bisa melakukannya dengan

<a style='cursor:pointer' >Link</a>
Naveen Heroorkar
sumber
1
<a href="#" onclick="SomeFunction()"  class="SomeClass">sth.</a>

ini adalah tag jangkar saya. jadi kembalikan false pada onClick = "" acara tidak berguna di sini. Saya baru saja menghapus properti href = "#" dan berhasil bagi saya seperti di bawah ini

<a onclick="SomeFunction()"  class="SomeClass">sth.</a>

dan saya perlu menambahkan css ini.

.SomeClass
{
    cursor: pointer;
}
Burk
sumber
Apa maksudmu dengan itu? Apa yang direkomendasikan dan mengapa?
Burk
Praktik yang baik untuk menyimpan javascript dan html dalam file terpisah, inilah jawaban terperinci: stackoverflow.com/questions/5871640/…
Alexandru Severin
1

Saya mengalami masalah ini di situs WordPress. Header pada menu dropdown selalu memiliki atribut href=""dan plugin header yang digunakan hanya diperbolehkan url standar. Solusi termudah di sana adalah hanya menjalankan kode ini di footer:

jQuery('[href=""]').click(function(e){
    e.preventDefault();
});

Ini akan mencegah jangkar kosong dari melakukan apa pun.

Bryant Jackson
sumber
0

Bereaksi tidak lagi mendukung menggunakan fungsi seperti ini href="javascript:void(0)"di jangkar tag Anda, tetapi di sini ada sesuatu yang bekerja dengan cukup baik.

<a href="#" onClick={() => null} >link</a>
w3bh4ck
sumber
-1

Saya tahu ini ditandai sebagai pertanyaan jQuery, tetapi Anda juga dapat menjawabnya dengan AngularJS.

di elemen Anda, tambahkan arahan ng-klik dan gunakan variabel $ event yang merupakan acara klik ... cegah perilaku default-nya:

<a href="#" ng-click="$event.preventDefault()">

Anda bahkan dapat melewatkan variabel $ event ke dalam suatu fungsi:

<a href="#" ng-click="doSomething($event)">

dalam fungsi itu, Anda melakukan apa pun yang Anda inginkan dengan acara klik.

Jeremy Jao
sumber