Як зробити так, щоб прив’язне посилання не можна було натиснути або відключити?


92

У мене є якірне посилання, яке я хочу відключити, коли користувач клацне на ньому. Або видаліть анкерний тег навколо тексту, але обов’язково збережіть текст.

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

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

Будь-яка підказка?

Коли ви натискаєте на неправильного музиканта, він повинен просто додати "Неправильно", а потім стати неможливим.
Коли ви натискаєте, і ви маєте рацію, він повинен додати "Чудово", а потім відключити всі <a>теги.


видаліть частину href і додайте до вашого CSS: "cursor: pointer", я припускаю, у вас є $ ('# ThisLink'). клацніть або щось подібне?
— Книга Зевса,

1
$ ("# ThisLink"). Parent (). Find ("a"). Remove ();
— Адам Холмс,

Адам, це рішення майже працює. Однак він позбавляється від усього тексту в тезі.
— Евік Джеймс,

Відповіді:


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.03.16

200

Найчистішим методом було б додати клас із подіями покажчика: жодного, коли ви хочете відключити клацання. Він би працював як звичайна етикетка.

.disableClick{
    pointer-events: none;
}

19
Використання цієї ідеї ще простішим способом було б використовувати [відключений] як селектор для css, щоб вам не потрібно було додавати клас .disableClick до якоря
— Ферран Сальгеро,

15
Будьте обережні, оскільки ви все ще можете переходити на вкладки для речей, вимкнених за допомогою покажчикових подій: жодного
— Майк Меллор

це рішення добре для мене в сучасних браузерах. у мене є придатні прив'язувальні теги, які зобов'язані натискати події, а також відбивати їх від спаму, оскільки їхні процеси роблять свою справу, я програмно додаю це, а потім видаляю після закінчення процесу. вкладка до відключеного прив'язувального тегу в моєму випадку теж не турбує, але може бути для інших. YMMV
— Стівен Тетро

2
Використання pointer-events:noneтакож вимкне cursor, текст заголовка та інші події наведення миші.
— Кіт,

значення none вказує події миші пройти "через" елемент і замість цього націлити все, що знаходиться "під ним". developer.mozilla.org/en-US/docs/Web/CSS/pointer-events Це може бути проблемою у деяких макетах
— user2988142

33
<a href='javascript:void(0);'>some text</a>

8
Поясніть, будь ласка, своє рішення, щоб майбутні відвідувачі цього питання зрозуміли, як воно вирішує проблему.
— War10ck

3
From: MDN: Порожній оператор . Коли браузер слідує за a javascript: URI, він обчислює код в URI, а потім замінює вміст сторінки повернутим значенням, якщо повернене значення не є undefined. voidОператор може використовуватися для повернення undefined. Наприклад: <a href="javascript:void(0);"> Click here to do nothing </a> Однак зверніть увагу, що javascript:псевдопротокол не рекомендується застосовувати до інших альтернатив, таких як ненав’язливі обробники подій.
— Ленін

28

Використовуйте стиль 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.
— вітріло

3
+1. Тільки щоб мені не довелося його знову шукати наступного разу: необхідний javascript (за допомогою jQuery) буде $("#elementid").attr("disabled", "disabled");. Також може бути корисним включення cursor: defaultдо CSS (як запропонував Мухаммад Насір).
— ASL

Елементи не мають відключеного атрибута, використання його як селектора може працювати, а може і не працювати.
— RobG

1
Інтуїтивно зрозуміле - хороше рішення. Я насправді був здивований, коли виявив, що <a />елементи не мають відключеного атрибута - здається дивним.
— Морваель 02.03.18


10

Bootstrap надає нам .disabledклас. Будь ласка, використовуйте його.

Але .disabledклас працює лише тоді, коли тег 'a' вже має клас 'btn'. Це не працює з будь-яким старим тегом "a". btnКлас не може бути доречно в тому чи іншому контексті , як це має стиль конотації. Під обкладинками .disabledклас встановлюється pointer-eventsна none, тож ви можете змусити CSS робити те саме, що переконали Сарой Арьял та Вітріло. (Дякую, Les Nightingill за цю пораду).


3
.disabled клас працює лише тоді, коли тег 'a' вже має клас 'btn'. Це не працює з будь-яким старим тегом "a". Клас 'btn' може бути невідповідним у якомусь контексті, оскільки він має стильові відтінки. Під обкладинками клас .disabled не встановлює покажчиків-подій на жодне, тож ви можете змусити css робити те саме, що переконали Сарой Aryal та Vitrilo.
— Les Nightingill

Дякуємо за детальний коментар. Це багато що уточнює для багатьох користувачів. Чи можу я використати текст із Вашого коментаря, щоб розширити свою відповідь?
— Євген Афанасьєв


5

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


2
У деяких браузерах видалення href просто встановлює href на / або поточну сторінку.
— Поліном

Я думаю, що це повинен бути перший підхід
— Бас

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; }щоб воно виглядало як звичайний текст.
— Поліном

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>
— Хосепас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.