Вы не можете отключить ссылку (в переносном виде). Вы можете использовать один из этих методов (каждый из которых имеет свои преимущества и недостатки).
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, проверьте условие (или сам атрибут disabled) и ничего не делайте в случае.
$("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()
).
Золтан Тамаси отметил в комментарии, что «в некоторых случаях событие click уже связано с некоторой« реальной »функцией (например, с использованием 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;
}
Если вы используете UI Framework, вы можете увидеть, что отключенные ссылки не оформлены должным образом. Например, Bootstrap 3.x обрабатывает этот сценарий, и кнопка правильно стилизована как с помощью disabled
атрибута, так и с помощью .disabled
класса. Если вместо этого вы очищаете ссылку (или используете один из других методов JavaScript), вы также должны обрабатывать стили, потому что <a>
без href
него по-прежнему отображается как включенный.
Доступные многофункциональные интернет-приложения (ARIA)
Не забудьте также включить атрибут aria-disabled="true"
вместе с disabled
атрибутом / классом.