Ich habe einen Link-Button in einem, <td>
den ich deaktivieren muss. Dies funktioniert im IE, aber nicht in Firefox und Chrome. Struktur ist - Link innerhalb eines <td>
. Ich kann keinen Container in die <td>
(wie div / span) hinzufügen
Ich habe Folgendes versucht, aber nicht an Firefox gearbeitet (mit 1.4.2 js):
$(td).children().each(function () {
$(this).attr('disabled', 'disabled');
});
$(td).children().attr('disabled', 'disabled');
$(td).children().attr('disabled', true);
$(td).children().attr('disabled', 'true');
Hinweis - Ich kann die Klickfunktion für das Ankertag nicht abmelden, da es dynamisch registriert wird. UND ICH MUSS DEN LINK IM BEHINDERTEN MODUS ZEIGEN.
javascript
jquery
html
css
Ankit
quelle
quelle
Antworten:
Sie können einen Link nicht deaktivieren (auf tragbare Weise). Sie können eine dieser Techniken verwenden (jede mit ihren eigenen Vor- und Nachteilen).
CSS Weg
Dies sollte der richtige Weg sein (siehe aber später), wenn die meisten Browser dies unterstützen:
Dies ist beispielsweise das, was Bootstrap 3.x tut. Derzeit (2016) wird es nur von Chrome, FireFox und Opera (19+) gut unterstützt. Internet Explorer unterstützt dies ab Version 11, jedoch nicht für Links. Es ist jedoch in einem äußeren Element wie dem folgenden verfügbar:
Mit:
Problemumgehung
Wir müssen wahrscheinlich eine CSS-Klasse definieren,
pointer-events: none
aber was ist, wenn wir das Attribut anstelle einer CSS-Klasse wiederverwendendisabled
? Genau genommendisabled
wird dies nicht unterstützt,<a>
aber Browser beschweren sich nicht über unbekannte Attribute. Wenn Sie dasdisabled
Attribut IE verwenden, wird es ignoriertpointer-events
, es wird jedoch das IE-spezifischedisabled
Attribut berücksichtigt. Andere CSS-kompatible Browser ignorieren unbekanntedisabled
Attribute und Ehrenpointer-events
. Einfacher zu schreiben als zu erklären:Eine weitere Option für IE 11 besteht darin,
display
Verknüpfungselemente zublock
oder festzulegeninline-block
:Beachten Sie, dass dies eine tragbare Lösung sein kann, wenn Sie IE unterstützen müssen (und Ihren HTML-Code ändern können), aber ...
Bitte beachten Sie, dass
pointer-events
nur ... Zeigerereignisse deaktiviert werden. Links können weiterhin über die Tastatur navigiert werden. Dann müssen Sie auch eine der anderen hier beschriebenen Techniken anwenden.Fokus
In Verbindung mit der oben beschriebenen CSS-Technik können Sie
tabindex
eine nicht standardmäßige Methode verwenden, um zu verhindern, dass ein Element fokussiert wird:Ich habe die Kompatibilität mit vielen Browsern nie überprüft. Vielleicht möchten Sie sie selbst testen, bevor Sie sie verwenden. Es hat den Vorteil, ohne JavaScript zu arbeiten. Leider (aber offensichtlich)
tabindex
kann nicht von CSS geändert werden.Klicks abfangen
Verwenden Sie eine
href
JavaScript-Funktion, überprüfen Sie die Bedingung (oder das deaktivierte Attribut selbst) und tun Sie für den Fall nichts.So deaktivieren Sie Links:
So aktivieren Sie sie erneut:
Wenn Sie möchten
.is("[disabled]")
, können Sie stattdessen verwenden.attr("disabled") != undefined
(jQuery 1.6+ wird immer zurückgegeben,undefined
wenn das Attribut nicht festgelegt ist),is()
ist aber viel klarer (danke an Dave Stewart für diesen Tipp). Bitte beachten Sie, dass ich dasdisabled
Attribut nicht standardmäßig verwende. Wenn Sie sich dafür interessieren, ersetzen Sie das Attribut durch eine Klasse und ersetzen Sie es.is("[disabled]")
durch.hasClass("disabled")
(Hinzufügen und Entfernen mitaddClass()
undremoveClass()
).Zoltán Tamási bemerkte in einem Kommentar, dass "in einigen Fällen das Klickereignis bereits an eine" echte "Funktion gebunden ist (z. B. mithilfe von knockoutjs). In diesem Fall kann die Reihenfolge der Ereignishandler einige Probleme verursachen. Daher habe ich deaktivierte Links implementiert, indem ich eine Rückgabe gebunden habe falsche Handler zu den wichtigsten Link
touchstart
,mousedown
undkeydown
Veranstaltungen. es hat einige Nachteile (es wird verhindert Touch auf den Link gestartet Scrollen)“ aber Tastaturereignisse Handhabung hat auch den Vorteil Navigation mit der Tastatur zu verhindern.Beachten Sie, dass
href
der Benutzer diese Seite manuell besuchen kann, wenn sie nicht gelöscht wird.Löschen Sie den Link
Löschen Sie das
href
Attribut. Mit diesem Code fügen Sie keinen Ereignishandler hinzu, sondern ändern den Link selbst. Verwenden Sie diesen Code, um Links zu deaktivieren:Und dieser, um sie wieder zu aktivieren:
Persönlich mag ich diese Lösung nicht sehr (wenn Sie nicht mehr mit deaktivierten Links tun müssen), aber sie kann aufgrund verschiedener Möglichkeiten, einem Link zu folgen, kompatibler sein.
Fake Click Handler
Hinzufügen / Entfernen einer
onclick
Funktionreturn false
, bei der der Link nicht befolgt wird. So deaktivieren Sie Links:So aktivieren Sie sie erneut:
Ich glaube nicht, dass es einen Grund gibt, diese Lösung der ersten vorzuziehen.
Styling
Das Styling ist noch einfacher, unabhängig davon, welche Lösung Sie zum Deaktivieren des Links verwenden. Wir haben ein
disabled
Attribut hinzugefügt , damit Sie die folgende CSS-Regel verwenden können:Wenn Sie eine Klasse anstelle eines Attributs verwenden:
Wenn Sie ein UI-Framework verwenden, stellen Sie möglicherweise fest, dass deaktivierte Links nicht richtig gestaltet sind. Bootstrap 3.x behandelt beispielsweise dieses Szenario und die Schaltfläche ist sowohl mit
disabled
Attribut als auch mit.disabled
Klasse korrekt gestaltet . Wenn Sie stattdessen den Link löschen (oder eine der anderen JavaScript-Techniken verwenden), müssen Sie auch das Styling übernehmen, da ein<a>
ohnehref
weiterhin als aktiviert gezeichnet wird.Zugängliche Rich Internet-Anwendungen (ARIA)
Vergessen Sie nicht, auch ein Attribut
aria-disabled="true"
zusammen mitdisabled
Attribut / Klasse anzugeben.quelle
td a
deaktivierten s Klickereignishandler hinzufügen , die aufrufen,event.preventDefault()
wenn dies$(this).data('disabled')
wahr ist, und dann aufdata('disabled', true)
einen beliebigen Link setzen, den ich deaktivieren möchte (false zum Aktivieren usw.)$(this).is('[disabled]')
könnte eine schönere Möglichkeit sein, das deaktivierte Attribut zu erkennenHabe das Update in CSS.
Über CSS wird das Klickereignis deaktiviert, wenn es auf das Ankertag angewendet wird.
Weitere Informationen finden Sie unter diesem Link
quelle
Dank an alle, die Lösungen veröffentlicht haben (insbesondere @AdrianoRepetti), habe ich mehrere Ansätze kombiniert, um einige erweiterte
disabled
Funktionen bereitzustellen (und es funktioniert browserübergreifend). Der Code ist unten (sowohl ES2015 als auch Coffeescript nach Ihren Wünschen).Dies bietet mehrere Verteidigungsebenen, sodass sich Anker, die als deaktiviert markiert sind, tatsächlich als solche verhalten. Mit diesem Ansatz erhalten Sie einen Anker, den Sie nicht können:
Wie man
Schließen Sie dieses CSS ein, da es die erste Verteidigungslinie ist. Dies setzt voraus, dass der von Ihnen verwendete Selektor ist
a.disabled
Instanziieren Sie diese Klasse als Nächstes (mit optionalem Selektor):
ES2015 Klasse
npm install -S key.js
Coffescript-Klasse:
quelle
Probieren Sie das Element aus:
Das Deaktivieren eines Links funktioniert für mich in Chrome: http://jsfiddle.net/KeesCBakker/LGYpz/ .
Firefox scheint nicht gut zu spielen. Dieses Beispiel funktioniert:
Hinweis: Es wurde eine Live-Anweisung für zukünftige deaktivierte / aktivierte Links hinzugefügt.
Hinweis 2: 'live' in 'on' geändert.
quelle
Bootstrap 4.1 bietet eine Klasse mit dem Namen
disabled
und demaria-disabled="true"
Attribut.Beispiel"
Mehr ist auf getbootstrap.com
Wenn Sie es also dynamisch erstellen möchten und dann
you don't want to care if it is button or ancor
im JS-Skript so etwas benötigenAber sei vorsichtig
Die Lösung funktioniert nur bei Verknüpfungen mit Klassen
btn btn-link
.Manchmal empfiehlt Bootstrap die Verwendung von
card-link
class. In diesem Fall funktioniert die Lösung nicht .quelle
Ich habe die folgende Lösung gefunden, die entweder mit einem Attribut
<a href="..." disabled="disabled">
oder einer Klasse funktionieren kann<a href="..." class="disabled">
:CSS-Stile:
Javascript (in jQuery bereit):
quelle
Sie können einen Link nicht deaktivieren. Wenn Sie möchten, dass dieses Klickereignis nicht ausgelöst wird, dann einfach
Remove
dasaction
von diesem Link.Weitere Informationen: - Elemente, die deaktiviert werden können
quelle
Ich würde so etwas tun
so etwas sollte funktionieren. Sie fügen eine Klasse für Links hinzu, die deaktiviert werden sollen, und geben dann false zurück, wenn jemand darauf klickt. Um sie zu aktivieren, entfernen Sie einfach die Klasse.
quelle
So deaktivieren Sie den Link für den Zugriff auf eine andere Seite auf dem Touch-Gerät:
quelle
setAttribute('href', '');
und die Seiten-URLhttp://example.com/page/?query=something
der Link sind, auf den beim Klicken auf IE11 zugegriffen wirdhttp://example.com/page/
. Eine Problemumgehung könnte seinsetAttribute('href', '#');
In Razor (.cshtml) können Sie Folgendes tun:
quelle
Sie können dies verwenden, um den Hyperlink von asp.net oder die Link-Schaltflächen in HTML zu deaktivieren.
quelle
Es gibt einen anderen möglichen Weg und den, den ich am liebsten mag. Grundsätzlich ist es die gleiche Art und Weise, wie Lightbox eine ganze Seite deaktiviert, indem ein Div platziert und mit dem Z-Index herumgespielt wird. Hier sind relevante Ausschnitte aus einem meiner Projekte. Dies funktioniert in allen Browsern !!!!!
Javascript (jQuery):
und in html
Der Resizer findet also die Positionen des Ankers (die Bilder sind nur Pfeile) und platziert den Disabler oben. Das Bild des Deaktivierers ist ein durchscheinendes graues Quadrat (ändern Sie die Breite / Höhe der Deaktivierer im HTML-Code entsprechend Ihrem Link), um anzuzeigen, dass es deaktiviert ist. Durch das Floating kann die Größe der Seite dynamisch geändert werden, und die Deaktivierer folgen in windowResizer (). Sie können geeignete Bilder über Google finden. Der Einfachheit halber habe ich das relevante CSS inline gestellt.
dann basierend auf einer Bedingung,
quelle
Ich denke, viele davon sind überlegt. Fügen Sie eine Klasse hinzu, wie Sie möchten
disabled_link
.Stellen Sie dann sicher, dass das CSS
.disabled_link { display: none }
Boom hat. Der Benutzer kann den Link nicht sehen, sodass Sie sich keine Sorgen machen müssen, dass er darauf klickt. Wenn sie etwas tun, um den anklickbaren Link zu erfüllen, entfernen Sie einfach die Klasse mit jQuery :
$("a.disabled_link").removeClass("super_disabled")
. Boom geschafft!quelle
$("td a").each(function(i,v){ $(this).data('href',this.href); $(this).attr('href','#').css('color','grey'); });
Dann, wenn du einen nicht zu deaktivieren willst:$(this).attr('href',$(this).data('href')).css('color','blue');