Href özelliği olmayan bir tutturma etiketi güvenli midir?


232

hrefÖzniteliği eklemeden bir bağlantı etiketi kullanmak ve bunun yerine bir JavaScript tıklama etkinliği işleyicisi kullanmak uygun mudur? Bu yüzden hrefboş bırakmamalıyım ( href="").


1
Onclick olayı yine de tetikleniyor mu? Span / div yerine çapa etiketlerini kullanmak istiyorum çünkü CSS'yi destekleyen tek makul etiket: IE'de gezinin
john

3
@Martin ANCHORS'a klavye üzerinden erişilebilir ve etkinleştirilebilir. Düzenli SPAN öğeleri yapamaz. Buraya bakınız: jsfiddle.net/simevidas/4DTxv/2
Šime Vidas


2
HTML5'te, href özelliği olmayan çapalar yer tutucu köprüleridir: dev.w3.org/html5/markup/a.html
Ignacio Lago

1
Bunun yerine bir düğme istemediğinizden emin misiniz? Bu sekme vb çalıştığı anlamına gelir ve gerekirse düğmeler gibi bakmak için düğmelerinizi stil. Kuşkusuz IE'de hover hakkında bilmiyorum.
robbie_c

Yanıtlar:


217

HTML5'te, niteliği aolmayan bir öğenin kullanılması hrefgeçerlidir. "Yer tutucu köprü" olarak kabul edilir.

Misal:

<a>previous</a>

W3c bağlantı etiketi referans sayfasında "yer tutucu köprüsü" araması yapın : https://www.w3.org/TR/2016/REC-html51-20161101/textlevel-semantics.html#the-a-element .

Ve burada wiki'de de bahsedildi: https://www.w3.org/wiki/Elements/a

Yer tutucu bağlantısı, bir bağlantı öğesi kullanmak istediğiniz ancak herhangi bir yere gitmesini istemediğiniz durumlar içindir. Bu, bir navigasyon menüsünde veya kırıntı izinde geçerli sayfayı işaretlemek için kullanışlıdır. (Eski yaklaşım, "etkin" veya "geçerli" adlı bir sınıfa sahip bir yayılma etiketi veya bağlantı etiketi veya gezinmeyi iptal etmek için JavaScript kullanmak olurdu.)

Yer tutucu bağlantısı, bağlantının hedefini çalışma zamanında JavaScript aracılığıyla dinamik olarak ayarlamak istediğiniz durumlarda da kullanışlıdır. Href özelliğinin değerini ayarlamanız yeterlidir ve bağlantı etiketi tıklanabilir hale gelir.

Ayrıca bakınız:


3
"Placeholder link" nin tanımı nedir?
Gyum Fox

14
Bir olmadan dikkat edin stil otomatik elemana eklenmez. hrefcursor: pointer
Luke

38

Tamam, ancak aynı zamanda bazı tarayıcıların yavaşlamasına neden olabilir.

http://webdesignfan.com/yslow-tutorial-part-2-of-3-reducing-server-calls/

Tavsiyem <a href="#"> </a> kullanmaktır

JQuery kullanıyorsanız şunları da kullanmayı unutmayın:

.click(function(event){
    event.preventDefault();
    // Click code here...
});

7
Karma değiştirmeyi içeren ajax yer imi kullanıyorum çünkü href = "#" kullanamıyorum, ne yapabilirim?
john

5
Javascript kullanmak yerine: void (0); href içinde javascript kullanın :; yazmak daha kısadır.
Ally

16
Performans cezası yalnızca gerçekten boş bir href özelliği belirtirseniz geçerlidir. Soru, href özelliği olmadığını belirtiyor.
Pete B

18
Aslında, makaleye göre (ve mantıklı) potansiyel performans cezası sadece boş src özellikleri için geçerlidir . Boş href özellikleri hakkında performans açısından hiçbir şey söylemez.
bergie3000

1
Merhaba @Gunnar, bağlantı artık yok gibi görünüyor. Talep için başka bir referansınız var mı?
user31782

25

Kısa cevap: Hayır.

Uzun cevap:

İlk olarak, bir href özelliği olmadan, bir bağlantı olmayacaktır. Bir bağlantı değilse, ( tabindexevrensel olarak desteklenmeyen HTML 5 özelliklerini kullanmadığınız sürece) klavye (veya nefes anahtarı veya işaretçi tabanlı olmayan çeşitli giriş aygıtları) erişilebilir olmayacaktır. Bir kontrolün klavye erişimine sahip olmamasının uygun olması çok nadirdir.

İkinci. JavaScript'in çalışmadığı zamanlarda bir alternatifiniz olmalıdır (sunucudan yüklenmesi yavaş olduğu için bir İnternet bağlantısı kesildi (örn. Hareket eden bir trende mobil sinyal), JS kapalı, vb.).

Yararlanın Kademeli iyileştirmelerle tarafından mütevazi JS.


Sorun şu ki, jQuery'nin "click" yöntemiyle bir tıklama olayı ekleyebileceğim bir şey istiyorum, bu da fare üzerinde geldiğinde vurgulanır ve bir bağlantı gibi altı çizilir. Başka bir şey, href içermeyen bir ankraj etiketi yanında bunu CSS olmadan başarabilir? (yani, jQuery aracılığıyla doğrudan tıklama işlevi atamasının basitliğini korurken, temel etkileşimi el ile eklemeden olduğu gibi).
Triynko

@Triynko - Bir bağlantı kullanın, ancak düzgün bir şekilde yapın. Cevabın son satırına bakınız.
Quentin

5
'A' etiketlere tabindex HTML4 itibaren yürürlüğe girmiştir (en azından) w3schools.com/tags/att_global_tabindex.asp
technoTarek

@technoTarek - Evet, ancak hrefzorunluydu (adlandırılmış bir çapa olmadığı sürece, bu durumda tabindex anlamlı değildi). Kullanımı tabindexsekme sırasına unfocusable unsurları eklemek için HTML 5 yeni yenilik
Quentin

4
Bu sadece yanlış. O sırada HTML için daha eski bir spesifikasyona atıfta bulunuyorsanız, söyleyemem, ancak HTML5 spesifikasyonuna göre, niteliksiz bir aetikete sahip olmak gerçekten mükemmel bir şekilde geçerlidir href.
michael

23

Geriye dönük uyumluluk için href kullanmanız gerekiyorsa,

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

# yerine, özelliği kullanmak istemiyorsanız


1
Ben işlevi dışında tüm bir bağlantı gibi davranan bir <a> etiketi gerekiyordu. Bu benim için hile yaptı.
Jad S

13

Etiket, href özelliği olmadan kullanmak için uygundur. Buradaki cevapların çoğunun aksine, href olmadığında çapa oluşturmanın standart nedenleri vardır. Anlamsal olarak, "a" bir çapa veya bir bağlantı anlamına gelir. Eğer bu anlamı takip eden herhangi bir şey için kullanırsanız, o zaman iyisinizdir.

Href içermeyen bir etiketin standart kullanımı, adlandırılmış bağlantılar oluşturmaktır. Bu, name = blah ile bir çapa kullanmanıza izin verir ve daha sonra geçerli sayfanın adlandırılmış bölümüne bağlantı oluşturmak için href = # blah ile bir çapa oluşturabilirsiniz. Ancak, aynı şekilde kimlikleri de kullanabileceğiniz için bu kullanımdan kaldırılmıştır. Örnek olarak id = header içeren bir başlık etiketi kullanabilir ve daha sonra href = # header'ı gösteren bir tutturucunuz olabilir.

Ancak benim amacım name özelliğinin kullanılmasını önermemek değil. Sadece bir href'e ihtiyacınız olmayan bir kullanım durumu sağlamak ve bu nedenle neden gerekli olmadığını düşünmek için.


2
Sorunun sormaya çalıştığını ve diğer cevapların neyi ele aldığını düşünüyorum, etkileşimli bir öğe (yani bir bağlantı) olarak kullanılanhref bir <a>öğenin niteliğini atlamanın güvenli olup olmadığıdır . Bahsettiğiniz gibi, bir özellik olmadan oldukça basit ... bir bağlantı değil, sadece bir çapa, ki bu tamamen farklı bir şey. href
BoltClock

1
Evet, ancak - sadece vurgulamak için - bu kullanım durumlarında <a> etiketi hala geçerlidir.
monokrome

9

<a>Bir href olmadan erişilebilirlik perspektifinden sekme mümkün değildir, bu yüzden bir href'iniz yoksa bir tabindex = '0 "ekleyin.


1
Veya yeniden yönlendirme yerine sayfa içi bir işlem yapacaksa bir düğme kullanın.
SimonDever

8

<a>Çok seviyeli menülerini kullanırken "href" olmadan etiketi kullanışlı olabilir ve bir sonraki seviyeye genişletmek gerekir ama bu menü etiket aktif halka olmak istemiyoruz. Hiç böyle bir sorunla karşılaşmadım.


1
Bu menüye klavye ile erişmeyi denediniz mi?
aij

Ben sadece IE üzerinde, bazı bağlantıların üzerine gelin ve biri href olmadan bir çapa olduğunu öğrendim, aşağıdaki URL ile küçük pop-up kaybolmak yerine, önceki url gösteren kalır. Çapa tıklanabilir değil, bu yüzden büyük bir sorun değil, bunun yerine bir div ile gitmem için yeterli.
Andrew

1

Bazı tarayıcılarda href özelliği vermiyorsanız sorunlarla karşılaşırsınız. Kodunuzu böyle bir şey yazmanızı öneririm:

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

kodunuzu () kendi işleviniz veya mantığınızla değiştirebilirsiniz, ancak return false eklemeyi unutmayın; Sonunda ifade.


Backbone.js ile Backbone.Router kullanıyorum #ve dizin sayfası için var. Navbar bağlantılarımdan bazıları için, kendi başınıza kullanırsanız #olan rotayı tetiklemek istemiyorum a href="#". Kullanmak <a href="#" onclick="return false;"rotanın tetiklenmesini durdurur ancak click olayı yine de işleyicime (jQuery ve Backbone.Radio ile bağlanmış DOM olaylarını kullanan) kadar kabarcıklar oluşturur. Teşekkürler @ shashwat13 :)
David Williamson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.