Wie kann ein Ankerlink nicht angeklickt oder deaktiviert werden?

89

Ich habe einen Ankerlink, den ich deaktivieren möchte, sobald der Benutzer darauf klickt. Oder entfernen Sie das Ankertag um den Text, aber behalten Sie den Text auf jeden Fall bei.

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

Ich kann dies einfach mit einer Schaltfläche tun, indem .attr("disabled", "disabled");
ich die deaktivierte Eigenschaft erfolgreich hinzufüge, aber der Link war immer noch anklickbar.
Es ist mir egal, ob der Text unterstrichen ist oder nicht.

Irgendeine Ahnung?

Wenn Sie auf den falschen Musiker klicken, sollte er einfach "Falsch" hinzufügen und dann nicht mehr anklickbar sein.
Wenn Sie auf klicken und korrekt sind, sollte "Awesome" hinzugefügt und dann alle <a>Tags deaktiviert werden .

Evik James
quelle
Entfernen Sie den href-Teil und fügen Sie Ihrem CSS Folgendes hinzu: "cursor: pointer". Ich nehme an, Sie haben ein $ ('# ThisLink'). click oder so ähnlich?
Buch des Zeus
1
$ ("# ThisLink"). Parent (). Find ("a"). Remove ();
Adam Holmes
Adam, diese Lösung funktioniert fast. Der gesamte Text innerhalb eines Tags wird jedoch entfernt.
Evik James
Mögliches Duplikat von So deaktivieren Sie HTML-Links
Steve Chambers

Antworten:

12

Ich habe gerade gemerkt, wonach Sie gefragt haben (ich hoffe). Hier ist eine hässliche Lösung

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
quelle
Dies könnte das Problem tatsächlich wirklich lösen, irgendwie ... Anstelle von .click verwenden Sie .on für den Body und delegieren an 'a [disabled]'. Fügen Sie dann den CSS-Code mit demselben Selektor in das eigentliche CSS ein. Dann ist das Verhindern des Klickens so einfach wie event.preventDefault () und das Zurückgeben von false
lassombra
2
Nicht einverstanden, verwenden Sie CSS "Zeiger-Ereignisse: keine;" stattdessen genau wie in anderen Antworten.
Vitrilo
200

Die sauberste Methode wäre, eine Klasse mit Zeigerereignissen hinzuzufügen: keine, wenn Sie einen Klick deaktivieren möchten. Es würde wie ein normales Etikett funktionieren.

.disableClick{
    pointer-events: none;
}
Mvinayakam
quelle
19
Mit dieser Idee wäre es noch einfacher, ein [deaktiviert] als Selektor für das CSS zu verwenden, sodass Sie die .disableClick-Klasse nicht zum Anker hinzufügen müssen
Ferran Salguero
15
Seien Sie jedoch vorsichtig, da Sie immer noch zu Dingen blättern können, die mit Zeigerereignissen deaktiviert sind: keine
Mike Mellor
Diese Lösung ist gut für mich in modernen Browsern. Ich habe verwendbare Ankertags, die dazu verpflichtet sind, Ereignisse anzuklicken und Spam zu verhindern, während ihre Prozesse ihre Sache tun. Ich füge dies programmgesteuert hinzu und entferne es dann, wenn der Prozess abgeschlossen ist. Das Tabulieren auf ein deaktiviertes Ankertag ist in meinem Fall ebenfalls kein Problem, kann aber für andere sein. YMMV
Stephen Tetreault
2
Mit pointer-events:nonewird auch cursorTiteltext und andere Mouseover-Ereignisse deaktiviert .
Keith
Der Wert none weist das Mausereignis an, das Element "durchzugehen" und stattdessen auf das zu zielen, was sich "unter" diesem Element befindet. developer.mozilla.org/en-US/docs/Web/CSS/pointer-events
Dies
33
<a href='javascript:void(0);'>some text</a>
Shiv Kumar Sah
quelle
8
Bitte erläutern Sie Ihre Lösung, damit zukünftige Besucher dieser Frage verstehen, wie sie das vorliegende Problem löst.
War10ck
3
Von: MDN: Der leere Operator . Wenn ein Browser a folgt javascript: URI, wertet er den Code in der URI aus und ersetzt dann den Inhalt der Seite durch den zurückgegebenen Wert, sofern der zurückgegebene Wert nicht lautet undefined. Der voidOperator kann zur Rückkehr verwendet werden undefined. Beispiel: <a href="javascript:void(0);"> Click here to do nothing </a> Beachten Sie jedoch, dass das javascript:Pseudoprotokoll gegenüber anderen Alternativen, wie z. B. unauffälligen Ereignishandlern, nicht empfohlen wird.
Lenin
28

Verwenden Sie Zeiger-Ereignisse CSS - Stil. (wie Jason MacDonald vorgeschlagen hat)

Siehe MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events . Es wird in den meisten Browsern unterstützt.

Das einfache Hinzufügen des Attributs "deaktiviert" zum Anker erledigt den Job, wenn Sie eine globale CSS-Regel wie die folgende haben:

a[disabled], a[disabled]:hover {
   pointer-events: none;
   color: #e1e1e1;
}
Vitrilo
quelle
3
+1 zum Hinzufügen des Stils über das Attribut [deaktiviert] anstelle einer Klasse. Es ist zu beachten, dass Zeigerereignisse: keine; funktioniert jedoch in nichts älterem als IE11.
Daniel Tonon
Alle IEs verfügen über eine eigene Logik zum Deaktivieren von Ankern, Schaltflächen und sogar anderen Elementen. Diese Problemumgehung ist für Nicht-IE-Browser erforderlich.
Vitrilo
3
+1. Nur damit ich es beim nächsten Mal nicht noch einmal nachschlagen muss: Erforderliches Javascript (mit jQuery) wäre $("#elementid").attr("disabled", "disabled");. Kann auch hilfreich sein, um cursor: defaultin das CSS aufgenommen zu werden (wie von Muhammad Nasir vorgeschlagen).
ASL
Ein Element hat kein deaktiviertes Attribut. Die Verwendung als Selektor kann funktionieren oder nicht.
RobG
1
Intuitiv - gute Lösung. Ich war tatsächlich überrascht, dass <a />Elemente kein deaktiviertes Attribut haben - scheint seltsam.
Morvael
11
$('a').removeAttr('href')

oder

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

Das hängt von der Situation ab

Ein Schuss
quelle
Das Entfernen des a über removeAttr funktioniert bei mir nicht. .removeAttr ("href") awesomealbums.info/?WhoAmI
Evik James
10

Bootstrap bietet uns .disabledKlasse. Bitte benutzen Sie es.

Die .disabledKlasse funktioniert jedoch nur, wenn das Tag 'a' bereits die Klasse 'btn' hat. Es funktioniert nicht mit einem alten 'a'-Tag. Die btnKlasse ist in einigen Kontexten möglicherweise nicht geeignet, da sie Stilkonnotationen hat. Unter der Decke .disabledsetzt die Klasse pointer-eventsauf none, sodass Sie CSS dazu bringen können, dasselbe zu tun, was Saroj Aryal und Vitrilo vorgeschlagen haben. (Danke, Les Nightingill für diesen Rat).

Jewgenij Afanasjew
quelle
3
Die .disabled-Klasse funktioniert nur, wenn das 'a'-Tag bereits die Klasse' btn 'hat. Es funktioniert nicht mit einem alten 'a'-Tag. Die 'btn'-Klasse ist in manchen Zusammenhängen möglicherweise nicht geeignet, da sie Stilkonnotationen hat. Unter dem Deckmantel setzt die .disabled-Klasse Zeigerereignisse auf none, sodass Sie css dazu bringen können, dasselbe zu tun, was Saroj Aryal und Vitrilo vorgeschlagen haben.
Les Nightingill
Vielen Dank für Ihren ausführlichen Kommentar. Es klärt viel für viele Benutzer. Darf ich einen Text aus Ihrem Kommentar verwenden, um meine Antwort zu erweitern?
Jewgenij Afanasjew
9

cssKlasse hinzufügen :

.disable_a_href{
    pointer-events: none;
}

Fügen Sie dies hinzu jquery:

$("#ThisLink").addClass("disable_a_href"); 
Jason MacDonald
quelle
5

Entfernen Sie einfach das hrefAttribut aus dem Ankertag.

Explosionspillen
quelle
2
In einigen Browsern setzt das Entfernen von href einfach href auf / oder die aktuelle Seite.
Polynom
Ich denke, dies sollte der erste Ansatz sein
Bas Slagter
5

Der beste Weg ist, die Standardaktion zu verhindern. Im Fall eines Ankertags wird standardmäßig auf umgeleitethref angegebene Adresse .

Das folgende Javascript funktioniert also am besten in der Situation:

$('#ThisLink').click(function(e)
{
    e.preventDefault();
});
Kedar.Aitawdekar
quelle
4

Mit dem Ereignis onclick können Sie die Klickaktion deaktivieren:

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

Oder Sie könnten einfach etwas anderes als ein <a>Tag verwenden.

Polynom
quelle
Sie können dies mit text-decoration: noneund kombinieren .disabledLink { color: #000 !important; }, um es wie normalen Text erscheinen zu lassen.
Polynom
1
aufdringliches Javascript ist eine schreckliche Lösung.
Jahrichie
4

Die Kommentare von Jason MacDonald haben bei mir funktioniert und in Chrome, Mozila und IE getestet.

Graue Farbe hinzugefügt, um den Deaktivierungseffekt anzuzeigen.

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

Jquery wählte nur das erste Element in der Ankerliste aus und fügte ein Metazeichen (*) hinzu, um alle Elemente mit der ID auszuwählen und zu deaktivieren #ThisLink.

$("#ThisLink*").addClass("disable_a_href"); 
Pankaj
quelle
4

Schreiben Sie eine einzelne Zeile jQuery-Code

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

wenn Sie in CSS-Datei schreiben möchten

.hyperlink{
    pointer-events: none;
}
Shaik Md N Rasool
quelle
3

Erstellen Sie folgende Klasse im Stylesheet:

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

Fügen Sie diese Klasse wie folgt dynamisch zu Ihrem Link hinzu.

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

    //   or using jquery
<script>
    $('#elemID').addClass('ThisLink');
 </script>
Muhammad Nasir
quelle
Wie unterscheidet sich das von Jason MacDonalds Antwort ?
Alle Arbeiter sind wesentlich
1

Versuche dies:

$('a').contents().unwrap();
Hari Pachuveetil
quelle
Was ist der Anker hält Styling-Regeln, die für ihr Programm wesentlich sind, dies ist ein Fix, der CSS ignoriert
Trevor Rudolph
1

Einfach in SASS:

.some_class{
     // styles...

     &.active {
       pointer-events:none;
     }
}
Saroj Aryal
quelle
Obwohl dieser Code die Frage möglicherweise beantwortet, würde die Bereitstellung eines zusätzlichen Kontexts darüber, warum und / oder wie er die Frage beantwortet, ihren langfristigen Wert erheblich verbessern. Bitte bearbeiten Sie Ihre Antwort, um eine Erklärung hinzuzufügen.
Toby Speight
1

Dies ist die Methode, die ich zum Deaktivieren verwendet habe. Ich hoffe, es hilft.

$("#ThisLink").attr("href","javascript:;");
Schwarze Mamba
quelle
1
Dies ist die einfache und unkomplizierte Lösung und sollte akzeptiert werden!
Si8
-1
$('#ThisLink').one('click',function(){
  $(this).bind('click',function(){
    return false;
  });
});

Dies wäre eine andere Möglichkeit. Der Handler mit return false, der den Link deaktiviert, wird nach einem Klick hinzugefügt.

GNi33
quelle
-4

Der einfachste Weg

In Ihrem HTML:

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

In deinem js:

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

Wenn Sie es als Attribut verwenden, funktioniert es perfekt

Nathre
quelle
3
deaktiviert ist kein gültiges Attribut für das <a> -Tag
Josepas