Bir bağlantıyı devre dışı bırakamazsınız (taşınabilir bir şekilde). Bu tekniklerden birini kullanabilirsiniz (her birinin kendi yararları ve dezavantajları vardır).
CSS yolu
Bu olmalı doğru yolu (ama daha sonra bakınız) tarayıcıların çoğu bunu destekleyecek ne zaman bunu yapmak için:
a.disabled {
pointer-events: none;
}
Örneğin, Bootstrap 3.x bunu yapar. Şu anda (2016) yalnızca Chrome, FireFox ve Opera (19+) tarafından iyi desteklenmektedir. Internet Explorer 11 sürümünü desteklemeye başladı ancak bağlantılar için değil, ancak aşağıdaki gibi bir dış öğede kullanılabilir:
span.disable-links {
pointer-events: none;
}
İle:
<span class="disable-links"><a href="#">...</a></span>
Geçici çözüm
Biz, muhtemelen, gerek CSS için sınıfını tanımlamak için pointer-events: none
biz ama eğer ne yenidendisabled
yerine CSS sınıfının niteliğini? Kesin olarak konuşmak disabled
için desteklenmez, <a>
ancak tarayıcılar bilinmeyen özelliklerden şikayet etmez . disabled
IE özniteliğini kullanmak yok sayar, pointer-events
ancak IE'ye özgü disabled
özniteliği onurlandırır ; CSS uyumlu diğer tarayıcılar, bilinmeyen disabled
özellikleri ve onurları yok sayar pointer-events
. Yazmak açıklamaktan daha kolay:
a[disabled] {
pointer-events: none;
}
IE 11 için başka bir seçenek display
, block
veya için bağlantı öğeleri kümesidir inline-block
:
<a style="pointer-events: none; display: inline-block;" href="#">...</a>
Bunun bir IE'yi desteklemeniz gerekiyorsa (ve HTML'nizi değiştirebilirsiniz) bunun taşınabilir bir çözüm ...
Bütün bunlar pointer-events
sadece işaretçi olaylarını devre dışı bıraktığını lütfen unutmayın . Bağlantılar yine de klavyede gezilebilir, o zaman burada açıklanan diğer tekniklerden birini de uygulamanız gerekir.
odak
Yukarıda açıklanan CSS tekniği ile bağlantılı olarak, tabindex
bir elemanın odaklanmasını önlemek için standart olmayan bir şekilde kullanabilirsiniz:
<a href="#" disabled tabindex="-1">...</a>
Birçok tarayıcıyla uyumluluğunu hiç kontrol etmedim, o zaman bunu kullanmadan önce kendiniz test etmek isteyebilirsiniz. JavaScript olmadan çalışma avantajı vardır. Maalesef (ama açıkçası) tabindex
CSS'den değiştirilemez.
Durdurma tıklama sayısı
href
A JavaScript işlevini kullanın , koşulu (veya devre dışı bırakılmış özniteliğin kendisini) denetleyin ve hiçbir şey yapmayın.
$("td > a").on("click", function(event){
if ($(this).is("[disabled]")) {
event.preventDefault();
}
});
Bağlantıları devre dışı bırakmak için şunu yapın:
$("td > a").attr("disabled", "disabled");
Bunları yeniden etkinleştirmek için:
$("td > a").removeAttr("disabled");
İsterseniz .is("[disabled]")
kullanmak kullanabilirsiniz .attr("disabled") != undefined
(jQuery 1.6+ her zaman undefined
öznitelik ayarlanmadığında geri döner ) ama is()
çok daha açıktır (bu ipucu için Dave Stewart sayesinde). Lütfen bu disabled
özelliği standart olmayan bir şekilde kullandığımı unutmayın , eğer bunu önemsiyorsanız özniteliği bir sınıfla değiştirin ve değiştirin.is("[disabled]")
ile .hasClass("disabled")
(ekleme ve birlikte kaldırarak addClass()
veremoveClass()
).
Zoltán Tamási yorumunda belirtildiği o olay işleyicisi sipariş bazı sorunları neden olabilir Bu durumda (örneğin knockoutjs kullanmak için) gerçek 'fonksiyonu "bazı durumlarda tıklama etkinlik zaten bazı bağlıdır'. Dolayısıyla ben bir dönüş bağlanarak engelli bağlantıları uygulamaya bağlantının yanlış işleyicisi touchstart
,mousedown
ve keydown
olaylar. Bu bazı dezavantajları (o dokunuş önleyecektir linke başladı kaydırmak)" vardır ama klavye olaylarını ele de klavye navigasyon önlemek için yararı vardır.
Unutmayın ki href
temizlenmez kullanıcı o sayfayı ziyaret etmek için bu mümkün.
Bağlantıyı temizle
href
Özelliği temizleyin . Bu kodla bir olay işleyicisi eklemezsiniz, ancak bağlantının kendisini değiştirirsiniz. Bağlantıları devre dışı bırakmak için bu kodu kullanın:
$("td > a").each(function() {
this.data("href", this.attr("href"))
.attr("href", "javascript:void(0)")
.attr("disabled", "disabled");
});
Ve bu onları yeniden etkinleştirmek için:
$("td > a").each(function() {
this.attr("href", this.data("href")).removeAttr("disabled");
});
Şahsen ben bu çözümü çok sevmiyorum (devre dışı bağlantılar ile daha fazlasını yapmak zorunda değilseniz) ama bir bağlantıyı takip etmenin çeşitli yolu nedeniyle daha uyumlu olabilir .
Sahte tıklama işleyici
Bağlantınızın takip edilmeyeceği bir onclick
işlev ekleyin / kaldırın return false
. Bağlantıları devre dışı bırakmak için:
$("td > a").attr("disabled", "disabled").on("click", function() {
return false;
});
Bunları yeniden etkinleştirmek için:
$("td > a").removeAttr("disabled").off("click");
Birincisi yerine bu çözümü tercih etmek için bir neden olduğunu düşünmüyorum.
Şekillendirme
Stil oluşturma daha da basittir, bağlantıyı devre dışı bırakmak için hangi çözümü kullanırsanız disabled
kullanın, aşağıdaki CSS kuralını kullanabilmeniz için bir özellik ekledik:
a[disabled] {
color: gray;
}
Özellik yerine bir sınıf kullanıyorsanız:
a.disabled {
color: gray;
}
Bir kullanıcı arayüzü çerçevesi kullanıyorsanız, devre dışı bırakılmış bağlantıların düzgün bir şekilde biçimlendirilmediğini görebilirsiniz . Önyükleme 3.x, örneğin, bu senaryoyu işler ve düğme hem disabled
niteliğe hem de .disabled
sınıfa doğru şekilde stilize edilir . Bunun yerine, bağlantıyı temizliyorsanız (veya diğer JavaScript tekniklerinden birini kullanıyorsanız), stilin işlenmesi gerekir, çünkü bir <a>
olmadan href
hala etkin olarak boyanır.
Erişilebilir Zengin İnternet Uygulamaları (ARIA)
Öznitelik / sınıfla aria-disabled="true"
birlikte bir öznitelik eklemeyi de unutmayın disabled
.