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


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.