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.

Evik James
źródło
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
Możliwy duplikat Jak wyłączyć linki HTML
Steve Chambers

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;
});
MSI
źródło
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;
}
mvinayakam
źródło
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>
Shiv Kumar Sah
źródło
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;
}
vitrilo
źródło
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
12
$('a').removeAttr('href')

lub

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

To zależy od sytuacji

Strzał
źródło
Usunięcie a przez removeAttr nie działa dla mnie. .removeAttr ("href") awesomealbums.info/?WhoAmI
Evik James
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ę).

Yevgeniy Afanasyev
źródło
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"); 
Jason MacDonald
źródło
5

Po prostu usuń hrefatrybut z tagu kotwicy.

Pigułki wybuchowe
źródło
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();
});
Kedar.Aitawdekar
źródło
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.

Wielomian
źródło
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"); 
Pankaj
źródło
4

Napisz to jeden wiersz kodu jQuery

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

jeśli chcesz pisać w pliku css

.hyperlink{
    pointer-events: none;
}
Shaik Md N Rasool
źródło
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>
Muhammad Nasir
źródło
Jak to się różni od Jasona MacDonalda odpowiedź ?
Wszyscy pracownicy są niezbędni
1

Spróbuj tego:

$('a').contents().unwrap();
Hari Pachuveetil
źródło
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;
     }
}
Saroj Aryal
źródło
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:;");
Czarna Mamba
źródło
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.

GNi33
źródło
-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

Nathre
źródło
3
disabled nie jest prawidłowym atrybutem dla tagu <a>
Josepas