Bir bağlantı bağlantısını nasıl tıklanamaz veya devre dışı bırakabilirsiniz?


92

Kullanıcı tıkladığında devre dışı bırakmak istediğim bir bağlantı bağlantım var. Veya bağlantı etiketini metnin etrafından kaldırın, ancak metni kesinlikle saklayın.

<a href='' id='ThisLink'>some text</a>

.attr("disabled", "disabled");
Devre dışı bırakılan özelliği başarıyla ekledim, ancak bağlantı yine de tıklanabilirdi ekleyerek bunu bir düğme ile kolayca yapabilirim .
Metnin altı çizilip çizilmemesi gerçekten umurumda değil.

Bir ipucu?

Yanlış müzisyene tıkladığınızda, sadece "Yanlış" eklemeli ve ardından tıklanamaz hale gelmelidir.
Tıkladığınızda ve doğru olduğunuzda, "Harika" eklemeli ve ardından tüm <a>etiketleri devre dışı bırakmalıdır .


href bölümünü kaldırın ve CSS'nize ekleyin: "cursor: pointer", bir $ ('# ThisLink') tıklama veya bunun gibi bir şeyin olduğunu varsayıyorum.
Book Of Zeus

1
$ ("# ThisLink"). Parent (). Find ("a"). Remove ();
Adam Holmes

Adam, bu çözüm neredeyse işe yarıyor. Yine de, bir etiket içindeki tüm metinlerden kurtulur.
Evik James

Yanıtlar:


12

Ne istediğini yeni anladım (umarım). İşte çirkin bir çözüm

var preventClick = false;

$('#ThisLink').click(function(e) {
    $(this)
       .css('cursor', 'default')
       .css('text-decoration', 'none')

    if (!preventClick) {
        $(this).html($(this).html() + ' lalala');
    }

    preventClick = true;

    return false;
});

Bu aslında sorunu gerçekten çözebilir, bir çeşit ... .click yerine, vücutta .on kullanın ve 'a [engelli]' ye delege edin. Daha sonra aynı seçiciyi kullanarak css kodunu gerçek css'e yerleştirin. Ardından, tıklamayı önlemek event.preventDefault () kadar basittir ve false döndürür
lassombra

2
Katılmıyorum, CSS "işaretçi olayları: yok;" kullanın bunun yerine, tıpkı diğer unswers'daki gibi.
vitrilo

200

En temiz yöntem, işaretçi olayları olan bir sınıf eklemektir: bir tıklamayı devre dışı bırakmak istediğinizde yok. Normal bir etiket gibi işlev görür.

.disableClick{
    pointer-events: none;
}

19
Bu fikri kullanmak daha da kolay bir yol, css için seçici olarak [devre dışı] kullanmaktır, böylece .disableClick sınıfını bağlantıya eklemenize gerek kalmaz
Ferran Salguero

15
İşaretçi olaylarıyla devre dışı bırakılan şeylere hala sekme yapabileceğiniz için dikkatli olun: yok
Mike Mellor

bu çözüm, modern tarayıcılarda benim için iyi. Tıklama olaylarına bağlı kullanılabilir bağlantı etiketlerim var ve süreçleri işlerini yaparken onları spam göndermekten caydırmak için bunu programlı olarak eklerim ve sonra işlem bittiğinde kaldırırım. Benim durumumda devre dışı bırakılmış bir bağlantı etiketine sekme yapmak da bir sorun değil, ancak diğerleri için olabilir. YMMV
Stephen Tetreault

2
Kullanımı , başlık metni ve diğer fareyle üzerine gelme olaylarını pointer-events:noneda devre dışı bırakır cursor.
Keith

none değeri, fare olayına öğenin "içinden" geçmesini ve bunun yerine öğenin "altında" olanı hedeflemesini bildirmez. developer.mozilla.org/en-US/docs/Web/CSS/pointer-events Bu, bazı düzenlerde bir sorun olabilir
user2988142

33
<a href='javascript:void(0);'>some text</a>

8
Lütfen çözümünüzü açıklayın, böylece bu soruya gelecek ziyaretçiler, sorunun mevcut sorunu nasıl çözdüğünü anlayacaktır.
War10ck

3
Kimden: MDN: Boşluk İşleci . Bir tarayıcı a'yı takip ettiğinde javascript: URI, URI'deki kodu değerlendirir ve daha sonra, döndürülen değer olmadıkça, sayfanın içeriğini döndürülen değerle değiştirir undefined. voidOperatör dönmek kullanılan olabilir undefined. Örneğin: <a href="javascript:void(0);"> Click here to do nothing </a> Bununla birlikte, javascript:sözde protokolün, göze batmayan olay işleyicileri gibi diğer alternatiflere göre tavsiye edilmediğini unutmayın.
Lenin

29

İşaretçi olayları CSS stilini kullanın . (Jason MacDonald'ın önerdiği gibi)

MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events adresine bakın . Çoğu tarayıcıda desteklenir.

Aşağıdaki gibi genel CSS kuralınız varsa, bağlantıya "devre dışı" niteliğinin basit bir şekilde eklenmesi işi yapar:

a[disabled], a[disabled]:hover {
   pointer-events: none;
   color: #e1e1e1;
}

3
Stilin bir sınıf yerine [devre dışı] özelliği aracılığıyla eklenmesi için +1. İşaretçi olaylarının: yok; IE11'den daha eski hiçbir şeyde çalışmıyor.
Daniel Tonon

Tüm IE'lerin, varsayılan olarak çapayı, düğmeleri ve hatta diğer öğeleri devre dışı bırakma konusunda kendi tescilli mantığı vardır. Bu geçici çözüm, IE olmayan tarayıcılar için gereklidir.
vitrilo

3
+1. Sırf bir dahaki sefere tekrar bakmam gerekmemesi için: gerekli javascript (jQuery kullanarak) olurdu $("#elementid").attr("disabled", "disabled");. cursor: defaultCSS'ye dahil etmek de yardımcı olabilir (Muhammed Nasir'in önerdiği gibi).
ASL

Bir öğenin devre dışı bırakılmış bir özniteliği yoktur, onu seçici olarak kullanmak işe yarayabilir veya çalışmayabilir.
RobG

1
Sezgisel - iyi çözüm. <a />Öğelerin devre dışı bırakılmış bir özelliği olmadığını görmek beni şaşırttı - garip görünüyor.
Morvael


10

Bootstrap bize .disabledsınıf sağlar. Lütfen onu kullanın.

Ancak .disabledsınıf yalnızca 'a' etiketi zaten 'btn' sınıfına sahip olduğunda çalışır. Herhangi bir eski 'a' etiketi üzerinde çalışmaz. btnO tarz çağrışımlar olduğu gibi sınıf bazı bağlamda uygun olmayabilir. Kapakları altında, .disabledsınıf setleri pointer-eventsiçin noneSaroj aryal ve Vitrilo sugested gibi, bu nedenle aynı şeyi yapmak için CSS yapabilirsiniz. (Bu tavsiye için teşekkürler, Les Nightingill).


3
.disabled sınıfı yalnızca 'a' etiketi zaten 'btn' sınıfına sahip olduğunda çalışır. Herhangi bir eski 'a' etiketi üzerinde çalışmaz. 'Btn' sınıfı, stil çağrışımlarına sahip olduğu için bazı bağlamlarda uygun olmayabilir. Kapakların altında, .disabled sınıfı işaretçi olaylarını yok olarak ayarlar, böylece Saroj Aryal ve Vitrilo'nun önerdiği şeyi yapmak için css yapabilirsiniz.
Les Nightingill

Detaylı yorumunuz için teşekkür ederiz. Birçok kullanıcı için çok şey netleştirir. Cevabımı genişletmek için yorumunuzdan bir metin kullanabilir miyim?
Yevgeniy Afanasyev

9

Bir csssınıf ekleyin :

.disable_a_href{
    pointer-events: none;
}

Bunu ekleyin jquery:

$("#ThisLink").addClass("disable_a_href"); 

5

Bağlantı hrefetiketinden niteliği kaldırmanız yeterlidir.


2
Bazı tarayıcılarda href'i kaldırmak, href'i / veya geçerli sayfaya ayarlar.
Polinom

Bence bu ilk yaklaşım olmalı
Bas Slagter

5

En iyi yol, varsayılan eylemi önlemektir. Bağlantı etiketi durumunda, varsayılan davranış, hrefbelirtilen adrese yönlendirmedir .

Dolayısıyla aşağıdaki javascript bu durumda en iyi sonucu verir:

$('#ThisLink').click(function(e)
{
    e.preventDefault();
});

4

Tıklama eylemini devre dışı bırakmak için onclick olayını kullanabilirsiniz:

<a href='' id='ThisLink' onclick='return false'>some text</a>

Veya <a>etiket dışında bir şey kullanabilirsiniz .


Bunu normal metin gibi görünmesi için text-decoration: noneve ile birleştirebilirsiniz .disabledLink { color: #000 !important; }.
Polinom

1
rahatsız edici javascript korkunç bir çözüm.
jahrichie

4

Jason MacDonald yorumları benim için çalıştı, Chrome, Mozila ve IE'de test edildi.

Devre dışı bırakma etkisini göstermek için gri renk eklendi.

.disable_a_href{
    pointer-events: none;
    **color:#c0c0c0 !important;**
}

Jquery, bağlantı listesindeki yalnızca ilk öğeyi seçiyordu, kimliğine sahip tüm öğeleri seçmek ve devre dışı bırakmak için meta karakter (*) ekledi #ThisLink.

$("#ThisLink*").addClass("disable_a_href"); 

4

Bu jQuery Kodunun tek satırını yazın

$('.hyperlink').css('pointer-events','none');

css dosyasına yazmak istiyorsanız

.hyperlink{
    pointer-events: none;
}

3

Stil sayfasında aşağıdaki sınıfı oluşturun:

  .ThisLink{
           pointer-events: none;
           cursor: default;
    }

Bu sınıfı size aşağıdaki gibi dinamik olarak ekleyin.

 <a href='' id='elemID'>some text</a>

    //   or using jquery
<script>
    $('#elemID').addClass('ThisLink');
 </script>

Bunun Jason MacDonald'ın cevabından farkı nedir?
Tüm Çalışanlar Önemlidir


1

Basitçe SASS'de:

.some_class{
     // styles...

     &.active {
       pointer-events:none;
     }
}

Bu kod soruyu yanıtlasa da, soruyu neden ve / veya nasıl yanıtladığına ilişkin ek bağlam sağlamak , uzun vadeli değerini önemli ölçüde artıracaktır. Lütfen bir açıklama eklemek için cevabınızı düzenleyin .
Toby Speight

1

Devre dışı bırakmak için kullandığım yöntem bu, umarım yardımcı olur.

$("#ThisLink").attr("href","javascript:;");

1
Bu basit ve kolay bir çözümdür ve kabul edilmelidir!
Si8

-1
$('#ThisLink').one('click',function(){
  $(this).bind('click',function(){
    return false;
  });
});

Bu, bunu yapmanın başka bir yolu olabilir return false, bağlantıyı devre dışı bırakacak olan işleyici , bir tıklamadan sonra eklenecektir.


-4

En kolay yol

HTML'nizde:

<a id="foo" disabled="true">xxxxx<a>

Js'nizde:

$('#foo').attr("disabled", false);

Nitelik olarak kullanırsanız mükemmel çalışır


3
devre dışı, <a> etiketi için geçerli bir öznitelik değil
Josepas
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.