Jak sprawić, by zakotwiczony link nie był klikalny lub był wyłączony?


92

Mam łącze kotwicy, które chcę wyłączyć, gdy użytkownik go kliknie. Lub usuń znacznik kotwicy z całego tekstu, ale zdecydowanie zachowaj tekst.

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

Mogę to łatwo zrobić za pomocą przycisku, dodając .attr("disabled", "disabled");
Pomyślnie dodałem wyłączoną właściwość, ale link nadal był klikalny.
Nie obchodzi mnie, czy tekst jest podkreślony, czy nie.

Jakaś wskazówka?

Kiedy klikniesz na niewłaściwego muzyka, powinien on po prostu dodać „Wrong” i stać się niemożliwym do kliknięcia.
Kiedy klikniesz i masz rację, powinien dodać „Niesamowite”, a następnie wyłączyć wszystkie <a>tagi.


usuń część href i dodaj do swojego CSS: "kursor: wskaźnik", zakładam, że masz $ ('# ThisLink'). kliknięcie czy coś w tym stylu?
Book Of Zeus

1
$ ("# ThisLink"). Parent (). Find ("a"). Remove ();
Adam Holmes

Adam, to rozwiązanie prawie działa. Jednak usuwa cały tekst w tagu.
Evik James

Odpowiedzi:


12

Właśnie zdałem sobie sprawę, o co prosiłeś (mam nadzieję). Oto brzydkie rozwiązanie

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

To mogłoby naprawdę rozwiązać problem, w pewnym sensie ... Zamiast .click, użyj .on na ciele i deleguj na „[wyłączony]”. Następnie umieść kod css w rzeczywistym css, używając tego samego selektora. Wówczas zapobieganie kliknięciom jest tak proste, jak event.preventDefault () i zwraca false
lassombra

2
Nie zgadzam się, użyj CSS "pointer-events: none;" zamiast tego, tak jak w innych odpowiedziach.
vitrilo

200

Najczystszą metodą byłoby dodanie klasy ze zdarzeniami pointer: none, gdy chcesz wyłączyć kliknięcie. Funkcjonowałaby jak normalna etykieta.

.disableClick{
    pointer-events: none;
}

19
Korzystając z tego pomysłu, jeszcze łatwiejszym sposobem byłoby użycie [disabled] jako selektora dla css, aby nie trzeba było dodawać klasy .disableClick do kotwicy
Ferran Salguero

15
Bądź ostrożny, jak można jeszcze zakładka do rzeczy wyłączone ze wskaźnikiem-events: none
Mike Mellor

to rozwiązanie jest dla mnie dobre w nowoczesnych przeglądarkach. Mam użyteczne znaczniki zakotwiczenia, które są powiązane ze zdarzeniami kliknięcia i aby zniechęcić do spamowania ich, gdy ich procesy robią swoje, programistycznie dodam to, a następnie usuwam po zakończeniu procesu. tabulacja do wyłączonego tagu kotwicy w moim przypadku też nie jest problemem, ale może być dla innych. YMMV
Stephen Tetreault

2
Użycie pointer-events:nonespowoduje również wyłączenie cursortekstu tytułu i innych zdarzeń najechania myszą.
Keith

wartość none instruuje zdarzenie myszy, aby przechodziło „przez” element i zamiast tego wskazywało na wszystko, co znajduje się „pod” tym elementem. developer.mozilla.org/en-US/docs/Web/CSS/pointer-events To mogą być problemy z niektórymi układami
user2988142

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

8
Proszę wyjaśnić swoje rozwiązanie, aby przyszli odwiedzający to pytanie zrozumieli, w jaki sposób rozwiązuje ono problem.
War10ck,

3
Od: MDN: The void Operator . Gdy przeglądarka podąża za a javascript: URI, ocenia kod w identyfikatorze URI, a następnie zastępuje zawartość strony zwracaną wartością, chyba że zwrócona wartość to undefined. voidOperatora może być używany do powrotu undefined. Na przykład: <a href="javascript:void(0);"> Click here to do nothing </a> Należy jednak pamiętać, że javascript:pseudo protokół jest odradzany w stosunku do innych alternatyw, takich jak dyskretne procedury obsługi zdarzeń.
Lenin

29

Użyj stylu CSS wskaźnika zdarzeń . (jak zasugerował Jason MacDonald)

Zobacz MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events . Jest obsługiwany w większości przeglądarek.

Proste dodanie atrybutu „wyłączony” do kotwicy wykona zadanie, jeśli masz globalną regułę CSS, taką jak:

a[disabled], a[disabled]:hover {
   pointer-events: none;
   color: #e1e1e1;
}

3
+1 za dodanie stylu za pomocą atrybutu [disabled] zamiast klasy. Należy zauważyć, że zdarzenia wskaźnikowe: brak; nie działa jednak w niczym starszym niż IE11.
Daniel Tonon

Wszystkie przeglądarki IE mają własną zastrzeżoną logikę domyślnego wyłączania kotwicy, przycisków, a nawet innych elementów. To obejście jest potrzebne w przeglądarkach innych niż IE.
vitrilo

3
+1. Po prostu nie będę musiał tego ponownie sprawdzać następnym razem: wymagany byłby javascript (używając jQuery) $("#elementid").attr("disabled", "disabled");. Pomocne może być również włączenie cursor: defaultdo CSS (zgodnie z sugestią Muhammada Nasira).
ASL

Elementy nie mają wyłączonego atrybutu, używanie go jako selektora może, ale nie musi , działać.
RobG,

1
Intuicyjny - dobre rozwiązanie. Zaskoczyło mnie, że <a />elementy nie mają wyłączonego atrybutu - wydaje się dziwne.
Morvael


10

Bootstrap zapewni nam .disabledklasę. Proszę, użyj go.

Ale .disabledklasa działa tylko wtedy, gdy znacznik „a” ma już klasę „btn”. Nie działa z żadnym starym znacznikiem „a”. btnKlasa nie może być odpowiednie w pewnym kontekście, jak to ma styl konotacje. Pod osłonami .disabledklasa ustawia się pointer-eventsna none, więc możesz sprawić, by CSS robił to samo, co sugerowali Saroj Aryal i Vitrilo. (Dziękuję Les Nightingill za tę radę).


3
klasa .disabled działa tylko wtedy, gdy znacznik „a” ma już klasę „btn”. Nie działa ze starym znacznikiem „a”. Klasa „btn” może nie być odpowiednia w pewnym kontekście, ponieważ ma konotacje stylowe. Pod osłonami klasa .disabled ustawia pointer-events na none, więc możesz sprawić, że css zrobi to samo, co sugerowali Saroj Aryal i Vitrilo.
Les Nightingill

Dziękuję za szczegółowy komentarz. To wiele wyjaśnia dla wielu użytkowników. Czy mogę skorzystać z tekstu z Twojego komentarza, aby rozszerzyć moją odpowiedź?
Yevgeniy Afanasjew

9

Dodaj csszajęcia:

.disable_a_href{
    pointer-events: none;
}

Dodaj to jquery:

$("#ThisLink").addClass("disable_a_href"); 

5

Po prostu usuń hrefatrybut z tagu kotwicy.


2
W niektórych przeglądarkach usunięcie atrybutu href po prostu ustawia href na / lub na bieżącą stronę.
Wielomian

Myślę, że to powinno być pierwsze podejście
Bas Slagter

5

Najlepszym sposobem jest zapobieganie domyślnej akcji. W przypadku tagu kotwicy domyślnym zachowaniem jest przekierowanie na hrefpodany adres.

Zatem następujący javascript działa najlepiej w tej sytuacji:

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

4

Możesz użyć zdarzenia onclick, aby wyłączyć akcję click:

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

Lub możesz po prostu użyć czegoś innego niż <a>tag.


Możesz to połączyć z text-decoration: nonei, .disabledLink { color: #000 !important; }aby wyglądało jak zwykły tekst.
Polynomial

1
natrętny javascript to straszne rozwiązanie.
jahrichie

4

Komentarze Jason MacDonald działały dla mnie, testowane w Chrome, Mozila i IE.

Dodano szary kolor, aby pokazać efekt wyłączenia.

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

Jquery wybierał tylko pierwszy element na liście kotwic, dodał metaznak (*), aby zaznaczyć i wyłączyć wszystkie elementy o identyfikatorze #ThisLink.

$("#ThisLink*").addClass("disable_a_href"); 

4

Napisz to jeden wiersz kodu jQuery

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

jeśli chcesz pisać w pliku css

.hyperlink{
    pointer-events: none;
}

3

Utwórz następującą klasę w arkuszu stylów:

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

Dodaj tę klasę do linku dynamicznie w następujący sposób.

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

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

Jak to się różni od Jasona MacDonalda odpowiedź ?
Wszyscy pracownicy są niezbędni

1

Spróbuj tego:

$('a').contents().unwrap();

co to jest kotwica zawiera zasady stylizacji, które są niezbędne dla ich programu, to jest poprawka, która ignoruje css
Trevor Rudolph,

1

Po prostu w SASS:

.some_class{
     // styles...

     &.active {
       pointer-events:none;
     }
}

Chociaż ten kod może odpowiedzieć na pytanie, dostarczenie dodatkowego kontekstu dotyczącego tego, dlaczego i / lub jak odpowiada na pytanie, znacznie poprawiłoby jego długoterminową wartość. Proszę edytować swoje odpowiedzi, aby dodać trochę wyjaśnień.
Toby Speight

1

To jest metoda, której użyłem do wyłączenia, mam nadzieję, że to pomaga.

$("#ThisLink").attr("href","javascript:;");

1
To jest proste i łatwe rozwiązanie i należy je zaakceptować!
Si8

-1
$('#ThisLink').one('click',function(){
  $(this).bind('click',function(){
    return false;
  });
});

Byłby to inny sposób na zrobienie tego, moduł obsługi return false, który wyłączy link, zostanie dodany po jednym kliknięciu.


-4

Najłatwiejszy sposób

W Twoim html:

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

W twoim js:

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

Jeśli użyjesz go jako atrybutu, działa idealnie


3
disabled nie jest prawidłowym atrybutem dla tagu <a>
Josepas
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.