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


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;
});

Это действительно могло бы решить проблему, вроде ... Вместо .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;
}

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


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

Спасибо за подробный комментарий. Это многое проясняет для многих пользователей. Могу я использовать текст из вашего комментария, чтобы продолжить свой ответ?
Евгений Афанасьев


5

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


2
В некоторых браузерах удаление href просто устанавливает href на / или текущую страницу.
Polynomial

Я думаю, это должен быть первый подход
Бас

5

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

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

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

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;
}

3

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

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

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

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

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

Чем это отличается от ответа Джейсона Макдональда ?
Все рабочие важны


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, который отключит ссылку, будет добавлен после одного щелчка.


-4

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

В вашем html:

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

В вашем js:

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

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


3
disabled не является допустимым атрибутом для тега <a>
Josepas 01
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.