Bir tutturucu etiketi hiçbir şeye işaret etmemek için nasıl?


159

Ben jQuery kullanın, bazı çapa etiketleri hiçbir eylem yapmak yapmak gerekir.

Genellikle böyle yazıyorum:

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

Ancak bu sayfanın üst kısmına işaret eder!


çünkü jquery tıklama olayını işleyecek, bu yüzden bağlantının bir achor bağlantısı gibi olmasını istiyorum, ancak bir JavaScript işlevi gibi davranıyorum
ahmed


1
Aşağıdaki yanıtlardan birinde belirtildiği gibi: bir bağlantının kaynağa işaret etmesini istemiyorsanız, A öğesini kullanmayın.
Mathias Bynens

İçindeki özelliği kullanmayın href.
vsync

Yanıtlar:


103

Herhangi bir şeye işaret etmesini istemiyorsanız, büyük olasılıkla <a>(çapa) etiketini kullanmamalısınız.

Bir şeyin bağlantı gibi görünmesini ancak bağlantı gibi davranmamasını istiyorsanız, uygun öğeyi (örneğin <span>) kullanmak ve sonra CSS kullanarak stil vermek en iyisidir :

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

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

Ayrıca, bu soruyu "jQuery" olarak etiketlediğiniz göz önüne alındığında, bir tıklama olayı işleyicisi eklemek istediğinizi varsayıyorum. Öyleyse, yukarıdakiyle aynı şeyi yapın ve ardından aşağıdaki JavaScript gibi bir şey kullanın:

$('#fake-link-1').click(function() {
    /* put your code here */
});

37
Bunun bir sorunu var: sekme navigasyonuna izin vermiyor.

6
(Iraimbilanja'nın işaret ettiği gibi) buradaki span yaklaşımının, bir kullanılabilirlik sorunu olduğunu düşündüğüm klavyeyi kullanarak işlevi başlatma olasılığını devre dışı bıraktığını unutmayın.
Fredrik Mörk

3
Ayrıca erişilebilirlik sorunu. Bir düğme öğesi kullanarak çözebilirsiniz (JavaScript'ten oluşturulan, böylece JS olmayan kullanıcılar kırık bir kontrol elde edemezler).
Quentin

4
İşte bunun için hızlı bir düzeltme: bağlantı olmayan bir öğedeki tabindex = "0", çoğu modern tarayıcıda klavye gezinmesini etkinleştirir.
Mathias Bynens

1
Başka bir 'sorun', CSS: hover pseudo sınıfının IE6'da bağlantı olmayan öğeler üzerinde çalışmayacağıdır. Ancak bu öğeleri yine de JavaScript aracılığıyla eklediğiniz için (en azından, yapmanız gerekir), üzerine geldiğinde öğeye .hover sınıfı ekleyen bir komut dosyası da yazabilirsiniz.
Mathias Bynens

268

Mükemmel çözümlerden birkaç tane daha az var:

1. Sahte bir çapa bağlantısı

<a href="#">

Sorun: Bağlantıyı tıklamak sayfanın üst kısmına geri dönüyor

2. 'a' dışında bir etiket kullanma

Bir yayılma etiketi kullanın ve tıklamayı işlemek için jquery kullanın

Sorun: Klavye gezinmesini kırıyor, fareyle üzerine gelme imlecini manuel olarak değiştirmek zorunda

3. Javascript geçersiz işlevine bağlantı

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

Sorun: IE'de görüntüler bağlanırken kesiliyor

Çözüm

Bunların hepsinin sorunları olduğu için, çözdüğüm çözüm sahte bir bağlantıya bağlamak ve onClick yönteminden false döndürmektir:

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

En özlü çözümler değil, ancak yukarıdaki yöntemlerle tüm sorunları çözer.


2
Genellikle javascript kullanıyorum: void (0); çünkü # kullanmak geçerli URL'yi fareyle üzerine gelindiğinde Firefox'un çubuğunda gösterir, bu da kullanıcı için yanıltıcı olabilir.
lucaferrario

8
breaks when linking images in IENe anlama geliyor?
eugene

14
@eugene bu soru şu anda 3 yaşında, ancak IE geçersiz bir işleve bağlantı ile çevrili görüntüleri kaybettiriyordu. Ne zaman sabitlendiğinden emin değilim, ancak yüklediğim tüm IE10'da çalışıyor. Şahsen şimdi kullanıyorum<a href="javascript:;">
zaius

1
Orada da yorumlar kullandım: <a href="javascript:void(0); // Özellikleri göster palette">. Bu şekilde, kullanıcı imleci üzerine geldiğinde, tıkladıklarında ne bekleyeceklerine dair bir ipucu verebilecek yorumu görürler. (Ayrıca bir ipucu da kullanabilirsiniz.)
Robin Zimmermann

5
Bu href="javascript:"da yeterli görünüyor ve en son ana tarayıcılarda çalışıyor. Noktalı virgüle gerek yok, aslında PhpStorm bile kaldırmayı öneriyor.
jlh

40

Hiçbir şey yapmamasını sağlamak için şunu kullanın:

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

1
ya da sadece <a href="javascript:;">. PS ile çalışmıyor target=_blankolsa
Alex

36

Bunu işlemenin doğru yolu, bağlantıyı işlediğinizde bağlantıyı jQuery ile "kırmak "tır

HTML

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

JS

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

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

Bu son iki arama, tıklamayı yorumlamayı tarayıcıyı durdurur.


5
Bu "uygun" gibi görünse de olay köpürmeyi durdurur, ancak "return false" çok daha az ayrıntılıdır ve aynı şeyi yapar. Bunu yapmak istediğiniz tek zaman, zaten jQuery aracılığıyla bağlantılara yapılan tıklamalara kayıtlı olay işleyicileriniz varsa.
aleemb

25

Bunu yapmanın pek çok yolu var

Ekleme ve hrefilişkilendirme

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

Href like yerine onclick olayı ekleyebilirsiniz

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

Veya bunun gibi en iyi yol olan geçersiz işlev ekleyebilirsiniz.

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

Name özelliği gerekli mi?
Petrus Theron

@PetrusTheron Gerekli değil. .
Punit Gajjar

Bu bir soygun önceden var cevaplar ise
aross

1
hrefÖzniteliği artık köprü gibi davranmayacağından (onclick hala çalışıyor olsa da) özniteliği kaldırırsanız, bağlayıcı etiketinizin stilini ayarlamayı unutmayın cursor: pointer;ve :hoverseçici gibi öğeleri sıfırlamanız gerekir .
Partack

@Partack Doğru .. Fark ettiğiniz için teşekkürler
Punit Gajjar

24

Hiçbir şeyle ne demek istiyorsun?

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

veya

<a href='whatever' onclick='return false;'>won't navigate</a>

1
Kabul etti - sadece jQuery yönteminden ve
voila'dan yanlış döndür,

14

Bence deneyebilirsin

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

Burada gördüğüm tek yakalama, üst düzey tarayıcı güvenliği javascript yürütme isteyebilir.

Bu daha kolay bir yol olsa da

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

bu az miktarda kullanılmalıdır

Bazı işaretçiler için bu makaleyi okuyun https://web.archive.org/web/20090301044015/http://blog.reindel.com/2006/08/11/a-hrefjavascriptvoid0-avoid-the-void


Doğru cevap, sekme navigasyonuna izin verir.
K - SO'da toksisite artıyor.

14

Bu yanıt yeni web standartlarını (HTML5) yansıtacak şekilde güncellenmelidir.

Bu:

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

... geçerli bir HTML5. Tabindex özelliği, klavyeyi normal köprüler gibi odaklanabilir hale getirir. Bunun için spanelemanı daha önce de belirtildiği gibi kullanabilirsiniz , ancak aelemanı daha zarif buluyorum .

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


1
Bu aynı zamanda geçerli bir HTML4'tür, ancak bağlantıyı bir bağlantı olarak biçimlendirmez.
interjay

1
Geçerli html4 olduğunu bilmiyordum, ancak HTML5 spec açıkça use-case bahseder. Ve href niteliğini hedeflemeyen stiller iyi çalışır, sadece varsayılan tarayıcı stilleri bir sorun olabilir.
13'te

1
Bu click, kullanıcı öğeye odaklanıp enter tuşuna bastığında da olayı tetiklemez (Firefox 51'de test edilmiştir).
torvin

@torvin, bu basit. keydownEtkinliği kullanın .
16'da

şık tuhaf, ama pencerede 10 elemanın etrafına kenarlıklı bir kutu ekler
1-14x0r

12

<a>Etiketin hreftag özelliğinin hiçbir şeye başvurmamasının üç yolu şunlardır :

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

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

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

1
Bu sadece bir yinelenen olduğunu şu anda en yüksek cevabı olarak , ama daha az bilgi ile
aross

5

Bunun eski bir soru olduğunu biliyorum, ama yine de iki sentimi ekleyeceğimi düşündüm:

Bağlantının ne yapacağına bağlıdır, ancak genellikle, aynı şeyi görüntüleyebilecek / yapacak olabilecek bir url'ye bağlantıyı işaret ederdim, örneğin, kutu açılır hakkında biraz yapıyorsanız:

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

Sonra jQuery ile

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

Bu şekilde, çok eski tarayıcılar (veya JavaScript devre dışı bırakılmış tarayıcılar) ayrı bir sayfaya gidebilir, ancak daha da önemlisi, Google bunu da alır ve yaklaşık sayfanın içeriğini tarar.


5

Durdurmak istediğiniz tüm bağlantılarınızın href="#!"(veya gerçekten istediğiniz herhangi bir şeyin) olduğundan emin olun ve ardından bunu kullanın:

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

4

Özniteliği aolmayan bir HTML bağlantısına ( etiketi) sahip olabilirsiniz href. hrefÖzelliği bırakın ve hiçbir şeye bağlanmaz:

<a>link</a>

Teşekkür ederim! Benim durumum için mükemmel çalıştı. Nerede URL olduğunda yeni sekmede açmak için Anchor etiketi olmasını istedim, ancak URL yoksa hiçbir şey. # Durumunda bir CLICK'i kabul edip sayfanın üstüne taşıyordu. Önerdiğiniz gibi href parçası olması. Sorunu çözdü! Bir etiket nedeniyle biçimlendirme harika görünüyor, href içermeyen tıklama sorunu. Teşekkür ederim!!!
Mohsin

1
Başka biri HTML5 geçerli olup olmadığını düşünüyorsa, cevap EVET :) stackoverflow.com/a/33046203/5323892 . İşte standartlar sayfasından bir örnek (3. li öğeye bakın): <nav> <ul> <li> <a href="https://stackoverflow.com/"> Ana Sayfa </a> </li> <li> <a href = "/ haberler "> Haberler </a> </li> <li> <a> Örnekler </a> </li> <li> <a href="https://stackoverflow.com/legal"> Yasal </a> </li> </ ul> </nav>
Mohsin

Çalışır, ancak fare işaretçisinin parmağa değişmesini istiyorsanız, @Rutesh Makhijani'nin cevabında önerildiği gibi href = "JavaScript: void (0)" ekleyin.
Tarık

3

Benim için işe yarayan tek şey yukarıdakilerin bir kombinasyonuydu:

İlk önce ul

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

Sonra LoadTab2_1'de sekme div'lerini manuel olarak değiştirdim

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

Bunun nedeni, bağlantısının kesilmesinin sekmelerdeki eylemin bağlantısını kesmesidir

Birincil sekme bir şeyleri değiştirdiğinde sekme stilini de manuel olarak yapmanız gerekir

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


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

bu benim çapa etiketimdi. bu nedenle onClick = "" olayının false değerini döndürmek burada yararlı değildir. Ben sadece href = "#" özelliğini kaldırdım ve aşağıdaki gibi benim için çalıştı

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

ve bu css eklemek gerekiyordu.

.SomeClass
{
    cursor: pointer;
}

Bununla ne demek istiyorsun. Ne önerilir ve neden?
Burk

Javascript ve html'yi ayrı dosyalarda tutmak için iyi bir uygulama: İşte ayrıntılı bir cevap: stackoverflow.com/questions/5871640/…
Alexandru Severin

1

Bir WordPress sitesinde bu sorunla karşılaştım. Açılır menülerdeki üstbilgiler her zaman özelliğe sahipti href=""ve kullanılan üstbilgi eklentisi yalnızca standart URL'lere izin verdi. En kolay çözüm, bu kodu altbilgide çalıştırmaktı:

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

Bu, boş çapaların herhangi bir şey yapmasını önleyecektir.


0

Reaksiyon artık href="javascript:void(0)"bağlantı etiketinizde böyle bir işlevi kullanmayı desteklemiyor , ancak işte oldukça iyi çalışan bir şey var.

<a href="#" onClick={() => null} >link</a>

-1

Bunun jQuery sorusu olarak etiketlendiğini biliyorum, ancak bunu AngularJS ile de cevaplayabilirsiniz.

öğenize ng-click yönergesini ekleyin ve click event olan $ event değişkenini kullanın ... varsayılan davranışını önleyin:

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

$ Event değişkenini bir işleve bile aktarabilirsiniz:

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

bu işlevde, tıklama etkinliğiyle ne istersen yaparsın.

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.