Ви не можете відключити посилання (портативним способом). Можна скористатися однією з цих методик (кожна з яких має свої переваги та недоліки).
CSS спосіб
Це має бути правильним способом (але дивіться далі), як це зробити, коли більшість браузерів підтримуватиме його:
a.disabled {
pointer-events: none;
}
Це те, що, наприклад, робить Bootstrap 3.x. В даний час (2016 р.) Він добре підтримується лише Chrome, FireFox та Opera (19+). Internet Explorer почав підтримувати це з версії 11, але не для посилань, однак він доступний у зовнішньому елементі, наприклад:
span.disable-links {
pointer-events: none;
}
З:
<span class="disable-links"><a href="#">...</a></span>
Обхід
Ми, напевно, потрібно визначити клас CSS для pointer-events: none
але що , якщо ми повторно в disabled
атрибут замість класу CSS? Власне кажучи, disabled
це не підтримується, <a>
але браузери не скаржаться на невідомі атрибути. Використання disabled
атрибута IE буде ігнорувати, pointer-events
але він буде шанувати специфічний disabled
атрибут IE ; інші браузери, сумісні з CSS, ігнорують невідомий disabled
атрибут та честь pointer-events
. Простіше написати, ніж пояснити:
a[disabled] {
pointer-events: none;
}
Іншим варіантом для IE 11 є встановлення display
елементів посилань на block
або inline-block
:
<a style="pointer-events: none; display: inline-block;" href="#">...</a>
Зауважте, що це може бути портативне рішення, якщо вам потрібно підтримати IE (і ви можете змінити свій HTML), але ...
Все це, зауважте, зауважте, що pointer-events
вимикає лише ... покажчикові події. Посилання все ще буде пересуватися через клавіатуру, тоді вам також потрібно застосувати один з інших методів, описаних тут.
Фокус
У поєднанні з описаною вище технікою CSS ви можете використовувати tabindex
нестандартний спосіб, щоб запобігти зосередженню елемента:
<a href="#" disabled tabindex="-1">...</a>
Я ніколи не перевіряв його сумісність із багатьма браузерами, тоді ви, можливо, захочете перевірити її перед тим, як користуватися цим. Він має перевагу працювати без JavaScript. На жаль (але очевидно) tabindex
неможливо змінити CSS.
Перехоплення кліків
Використовуйте href
функцію JavaScript, перевірте стан (або сам атрибут вимкнено) і нічого не робити в разі.
$("td > a").on("click", function(event){
if ($(this).is("[disabled]")) {
event.preventDefault();
}
});
Щоб відключити посилання, виконайте це:
$("td > a").attr("disabled", "disabled");
Щоб повторно увімкнути їх:
$("td > a").removeAttr("disabled");
Якщо ви хочете замість .is("[disabled]")
вас, ви можете використовувати .attr("disabled") != undefined
(jQuery 1.6+ завжди буде повертатися, undefined
коли атрибут не встановлений), але is()
це набагато зрозуміліше (завдяки Дейву Стюарту за цю пораду). Зауважте, тут я використовую disabled
атрибут нестандартним способом, якщо вам це важливо, то замініть атрибут класом і замініть .is("[disabled]")
на .hasClass("disabled")
(додавання та видалення з addClass()
і removeClass()
).
Золтан Тамасі зазначив у коментарі, що "в деяких випадках подія клацання вже пов'язана з якоюсь" реальною "функцією (наприклад, з використанням knockoutjs). У такому випадку замовлення обробника подій може спричинити деякі неприємності. Отже, я реалізував відключені посилання, прив'язуючи повернення помилковий обробник за посиланням в touchstart
, mousedown
і keydown
події. він має деякі недоліки (це запобіжить дотик перегортання початок по посиланню) » , але обробка подій клавіатури також має перевагу , щоб запобігти клавіатури.
Зауважте, що якщо href
не очищено, користувач може вручну відвідати цю сторінку.
Очистити посилання
Очистіть href
атрибут. За допомогою цього коду ви не додаєте обробник подій, але ви самі змінюєте посилання. Використовуйте цей код для відключення посилань:
$("td > a").each(function() {
this.data("href", this.attr("href"))
.attr("href", "javascript:void(0)")
.attr("disabled", "disabled");
});
І цей повторно включити їх:
$("td > a").each(function() {
this.attr("href", this.data("href")).removeAttr("disabled");
});
Особисто мені це рішення не дуже подобається (якщо вам більше не потрібно робити заборонені посилання), але воно може бути більш сумісним через різний спосіб перейти за посиланням.
Підроблений обробник кліків
Додати / видалити onclick
функцію, де ви return false
, посилання не буде дотримуватися. Щоб вимкнути посилання:
$("td > a").attr("disabled", "disabled").on("click", function() {
return false;
});
Щоб повторно увімкнути їх:
$("td > a").removeAttr("disabled").off("click");
Я не думаю, що є причина віддавати перевагу цьому рішенню замість першого.
Стилізація
Стайлінг стає ще простішим, будь-яке рішення, яке ви використовуєте для відключення посилання, ми додали disabled
атрибут, щоб ви могли використовувати наступне правило CSS:
a[disabled] {
color: gray;
}
Якщо ви використовуєте клас замість атрибута:
a.disabled {
color: gray;
}
Якщо ви використовуєте рамку інтерфейсу користувача, можливо, ви побачите, що відключені посилання неправильно оформлені. Наприклад, Bootstrap 3.x, обробляє цей сценарій, і кнопка правильно стильована як з disabled
атрибутом, так і з .disabled
класом. Якщо замість цього ви очищаєте посилання (або використовуєте одну з інших методик JavaScript), ви також повинні керувати стилізацією, оскільки <a>
без href
тексту все ще пофарбовано як включено.
Доступні додатки для багатого Інтернету (ARIA)
Не забудьте також включити атрибут aria-disabled="true"
разом із disabled
атрибутом / класом.