Как сделать анкорную ссылку неактивной или отключенной?

92

У меня есть якорная ссылка, которую я хочу отключить, когда пользователь нажимает на нее. Или удалите тег привязки вокруг текста, но обязательно сохраните текст.

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

Я могу легко сделать это с помощью кнопки, добавив, что .attr("disabled", "disabled");
я успешно добавил свойство disabled, но ссылка все еще была активна.
Мне все равно, подчеркнут текст или нет.

Есть подсказка?

Когда вы нажимаете не на того музыканта, он должен просто добавить «Неправильный», а затем перестать быть кликабельным.
Когда вы щелкаете и правы, он должен добавить "Awesome", а затем отключить все <a>теги.

Эвик Джеймс
источник
удалите часть href и добавьте в свой CSS: "cursor: pointer", я полагаю, у вас есть $ ('# ThisLink'). click или что-то в этом роде?
Book Of Zeus
1
$ ("# ThisLink"). Parent (). Find ("a"). Remove ();
Адам Холмс
Адам, это решение почти работает. Тем не менее, он избавляется от всего текста внутри тега.
Evik James
Возможный дубликат раздела Как отключить HTML-ссылки
Стив Чемберс,

Ответы:

12

Я только что понял, о чем вы просили (надеюсь). Вот уродливое решение

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;
});
MSI
источник
Это действительно могло бы решить проблему, вроде ... Вместо .click используйте .on в теле и делегируйте 'a [disabled]'. Затем поместите код css в фактический css, используя тот же селектор. Тогда предотвратить щелчок так же просто, как event.preventDefault () и вернуть false
lassombra
2
Не согласен, используйте CSS "pointer-events: none;" вместо этого, как и в других ответах.
vitrilo 02
200

Самый чистый метод - добавить класс с указателями-событиями: нет, если вы хотите отключить щелчок. Он работал бы как обычный ярлык.

.disableClick{
    pointer-events: none;
}
мвинаякам
источник
19
Используя эту идею, еще проще было бы использовать [disabled] в качестве селектора для css, чтобы вам не требовалось добавлять класс .disableClick к привязке
Ферран Салгуэро
15
Однако будьте осторожны, так как вы все еще можете вкладывать элементы, отключенные с помощью событий-указателей: none
Майк Меллор,
это решение мне подходит в современных браузерах. У меня есть полезные теги привязки, которые привязаны к событиям щелчка, и чтобы препятствовать их рассылке спама, поскольку их процессы делают свое дело, я программно добавляю это, а затем удаляю, когда процесс завершен. переход к отключенному тегу привязки в моем случае тоже не является проблемой, но может быть для других. YMMV
Стивен Тетро
2
Использование pointer-events:noneтакже отключит cursor, текст заголовка и другие события наведения указателя мыши.
Кейт
значение none указывает событию мыши пройти «через» элемент и вместо этого нацелить то, что находится «под» этим элементом. developer.mozilla.org/en-US/docs/Web/CSS/pointer-events Это может быть
проблемой
33
<a href='javascript:void(0);'>some text</a>
Шив Кумар Сах
источник
8
Пожалуйста, объясните свое решение, чтобы будущие посетители этого вопроса понимали, как оно решает возникшую проблему.
War10ck 05
3
От: MDN: Оператор void . Когда браузер следует за a javascript: URI, он оценивает код в URI и затем заменяет содержимое страницы возвращенным значением, если только возвращаемое значение не является undefined. voidОператор может использоваться для возврата undefined. Например: <a href="javascript:void(0);"> Click here to do nothing </a> обратите внимание, что javascript:псевдопротокол не рекомендуется по сравнению с другими альтернативами, такими как ненавязчивые обработчики событий.
Ленин
29

Используйте стиль CSS -указателей . (как предложил Джейсон Макдональд)

См. MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events . Поддерживается в большинстве браузеров.

Простое добавление атрибута disabled к привязке выполнит свою работу, если у вас есть глобальное правило CSS, подобное следующему:

a[disabled], a[disabled]:hover {
   pointer-events: none;
   color: #e1e1e1;
}
Vitrilo
источник
3
+1 за добавление стиля через атрибут [disabled], а не через класс. Следует отметить, что указатели-события: нет; не работает ни с чем старше IE11.
Дэниел Тонон
Все IE имеют свою собственную логику отключения привязки, кнопок и даже других элементов по умолчанию. Этот обходной путь необходим для браузеров, отличных от IE.
vitrilo
3
+1. Просто чтобы мне не пришлось искать его снова в следующий раз: требуется javascript (с использованием jQuery) $("#elementid").attr("disabled", "disabled");. Также может быть полезно включить cursor: defaultв CSS (как предложил Мухаммад Насир).
ASL
Элементы не имеют атрибута disabled , использование его в качестве селектора может работать, а может и не работать.
RobG 08
1
Интуитивно понятное - хорошее решение. Я был действительно удивлен, обнаружив, что <a />элементы не имеют атрибута disabled - это кажется странным.
Морваэль 02
12
$('a').removeAttr('href')

или

$('a').click(function(){ return false})

Это зависит от ситуации

Выстрел
источник
Удаление a через removeAttr для меня не работает. .removeAttr ("href") awesomealbums.info/?WhoAmI
Evik James
10

Bootstrap предоставляет нам .disabledкласс. Пожалуйста, используйте это.

Но .disabledкласс работает только тогда, когда тег «a» уже имеет класс «btn». Он не работает ни с одним старым тегом "a". btnКласс не может быть уместно в том или ином контексте , как это имеет стиль коннотации. Под обложками .disabledкласс устанавливается pointer-eventsв значение none, поэтому вы можете заставить CSS делать то же самое, что предлагали Saroj Aryal и Vitrilo. (Спасибо, Лес Найтингилл за этот совет).

Евгений Афанасьев
источник
3
класс .disabled работает только тогда, когда тег «a» уже имеет класс «btn». Он не работает ни с одним старым тегом "a". Класс 'btn' может не подходить в каком-то контексте, поскольку он имеет стилевые коннотации. По сути, класс .disabled устанавливает для указателей-событий значение none, поэтому вы можете заставить css делать то же самое, что предложили Saroj Aryal и Vitrilo.
Les Nightingill
Спасибо за подробный комментарий. Это многое проясняет для многих пользователей. Могу я использовать текст из вашего комментария, чтобы продолжить свой ответ?
Евгений Афанасьев
9

Добавить cssкласс:

.disable_a_href{
    pointer-events: none;
}

Добавьте это jquery:

$("#ThisLink").addClass("disable_a_href"); 
Джейсон Макдональд
источник
5

Просто удалите hrefатрибут из тега привязки.

Таблетки от взрыва
источник
2
В некоторых браузерах удаление href просто устанавливает href на / или текущую страницу.
Polynomial
Я думаю, это должен быть первый подход
Бас
5

Лучший способ - предотвратить действие по умолчанию. В случае тега привязки поведение по умолчанию - перенаправление на hrefуказанный адрес.

Итак, следующий javascript работает лучше всего в этой ситуации:

$('#ThisLink').click(function(e)
{
    e.preventDefault();
});
Kedar.Aitawdekar
источник
4

Вы можете использовать событие onclick, чтобы отключить действие щелчка:

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

Или вы можете просто использовать что-то другое, кроме <a>тега.

Полиномиальный
источник
Вы можете комбинировать это с text-decoration: noneи, .disabledLink { color: #000 !important; }чтобы он выглядел как обычный текст.
Polynomial
1
навязчивый javascript - ужасное решение.
jahrichie
4

Комментарии Джейсона Макдональда у меня сработали, протестированы в Chrome, Mozila и IE.

Добавлен серый цвет, чтобы показать эффект отключения.

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

Jquery выбирал только первый элемент в списке привязок, добавлял метасимвол (*) для выбора и отключения всех элементов с идентификатором #ThisLink.

$("#ThisLink*").addClass("disable_a_href"); 
Панкадж
источник
4

Напишите это одной строкой кода jQuery

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

если вы хотите написать в файл css

.hyperlink{
    pointer-events: none;
}
Shaik Md N Rasool
источник
3

Создайте следующий класс в таблице стилей:

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

Добавьте этот класс в ссылку динамически, как показано ниже.

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

    //   or using jquery
<script>
    $('#elemID').addClass('ThisLink');
 </script>
Мухаммад Насир
источник
Чем это отличается от ответа Джейсона Макдональда ?
Все рабочие важны
1

Попробуй это:

$('a').contents().unwrap();
Хари Пачувеетил
источник
какой якорь содержит правила стилизации, которые необходимы для их программы, это исправление, игнорирующее css
Тревор Рудольф
1

Просто в SASS:

.some_class{
     // styles...

     &.active {
       pointer-events:none;
     }
}
Сародж Арьял
источник
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как он отвечает на вопрос, значительно улучшило бы его долгосрочную ценность. Пожалуйста, отредактируйте свой ответ, чтобы добавить пояснение.
Тоби Спейт
1

Это метод, который я использовал для отключения. Надеюсь, он поможет.

$("#ThisLink").attr("href","javascript:;");
Черная мамба
источник
1
Это простое и легкое решение, и его следует принять!
Si8
-1
$('#ThisLink').one('click',function(){
  $(this).bind('click',function(){
    return false;
  });
});

Это был бы другой способ сделать это, обработчик return false, который отключит ссылку, будет добавлен после одного щелчка.

GNi33
источник
-4

Самый простой способ

В вашем html:

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

В вашем js:

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

Если вы используете его как атрибут, отлично работает

Натре
источник
3
disabled не является допустимым атрибутом для тега <a>
Josepas 01