2009-07-22 14 views
145

Wie aktiviert oder deaktiviert man einen Anker mit jQuery?Wie aktiviert oder deaktiviert man einen Anker mit jQuery?

+0

Vielen Dank für Ihre Antwort, noch ist es nicht so arbeiten, können Sie bitte es funktioniert mit document.ready function –

+0

Es kann hilfreich sein, wenn Sie das Code-Snippet veröffentlichen, das nicht funktioniert. –

+0

Eigentlich ist meine Codierung in Rails und meine Codierung ist <% = foo.add_associated_link ('E-Mail-Adresse', @ project.email.build)%> wenn ich es in Browser rendern kann ich die E-Mail aber ich kann es nicht sogar ich versuchte mit Codierung wie e.preventDefault(), aber ohne Ergebnis –

Antwort

187

Um einen Anker aus nach dem angegebenen href zu verhindern, würde ich preventDefault() schlage vor, mit:

// jQuery 1.7+ 
$(function() { 
    $('a.something').on("click", function (e) { 
     e.preventDefault(); 
    }); 
}); 

// jQuery < 1.7 
$(function() { 
    $('a.something').click(function (e) { 
     e.preventDefault(); 
    }); 

    // or 

    $('a.something').bind("click", function (e) { 
     e.preventDefault(); 
    }); 
}); 

See:

http://docs.jquery.com/Events/jQuery.Event#event.preventDefault.28.29

Siehe auch diese vorherige Frage auf SO:

jQuery disable a link

+0

Ich versuchte mit diesen "attr" es funktioniert nur auf Formularelement nicht auf Anchor-Tag. –

+1

@senthil - preventDefault wird als der 'richtige' Weg betrachtet, dies zu tun, siehe meine Bearbeitung (Link zu einem anderen Q + A) – karim79

+0

Eigentlich ist meine Kodierung in Rails und meine Kodierung ist <% = foo.add_associated_link ('Email hinzufügen', @ project.email.build)%> Wenn ich es in den Browser rendere, kann ich die E-Mail sehen, aber ich kann sie nicht deaktivieren, selbst wenn ich mit e.preventDefault() versucht habe, aber kein Ergebnis –

12
$("a").click(function(){ 
       alert('disabled'); 
       return false; 

}); 
4

Sie gaben nie wirklich sehen wollen, wie Sie sie deaktiviert wollte, oder was würde die Sperrung führen.

Erstens wollen Sie, um herauszufinden, wie der Wert für Behinderte einzustellen, für die Sie JQuery's Attribute Functions verwenden würden, und haben diese Funktion auf einem event, wie ein click oder der loading des Dokuments geschehen.

110

Die App, an der ich gerade arbeite, macht es mit einem CSS-Stil in Kombination mit Javascript.

a.disabled { color:gray; } 

Dann, wenn ich einen Link deaktivieren nenne ich

$('thelink').addClass('disabled'); 

Dann wird in dem Click-Handler für 'TheLink' ein Tag habe ich immer einen Scheck erste, was laufen

if ($('thelink').hasClass('disabled')) return; 
8

Es ist so einfach wie falsch zurückgeben;

ex.

jQuery("li a:eq(0)").click(function(){ 
    return false; 
}) 

oder

jQuery("#menu a").click(function(){ 
    return false; 
}) 
37

fand ich eine Antwort, die Ich mag viel besser here

wie folgt aussieht:

$(document).ready(function(){ 
    $("a").click(function() { 
     $(this).fadeTo("fast", .5).removeAttr("href"); 
    }); 
}); 

Das Attribut href Einstellung aktivieren, beinhalten würde

$(document).ready(function(){ 
    $("a").click(function() { 
     $(this).fadeIn("fast").attr("href", "http://whatever.com/wherever.html"); 
    }); 
}); 

Dies gibt Ihnen das Aussehen, dass das Ankerelement normaler Text wird, und umgekehrt.

+0

Nice antwort danke buddy –

+0

Awesome! GJ .... –

+0

Ausgezeichnete Sachen, danke. – svth

5
$("a").click(function(event) { 
    event.preventDefault(); 
}); 

Wenn diese Methode die Standardaktion des Ereignisses aufgerufen wird, wird nicht ausgelöst.

+2

das ist das gleiche wie die angenommene Antwort –

13

Ich denke, eine bessere Lösung besteht darin, das deaktivierte Datenattribut einzuschalten und es beim Anklicken zu verankern. Auf diese Weise können wir vorübergehend einen Anker deaktivieren, bis z.B.Das Javascript ist mit einem Ajax-Aufruf oder einigen Berechnungen abgeschlossen. Wenn wir es nicht deaktivieren, dann können wir es schnell ein paar Mal auf, was unerwünscht ist ...

$('a').live('click', function() { 
    var anchor = $(this); 

    if (anchor.data("disabled")) { 
     return false; 
    } 

    anchor.data("disabled", "disabled"); 

    $.ajax({ 
     url: url, 
     data: data, 
     cache: false, 
     success: function (json) { 
      // when it's done, we enable the anchor again 
      anchor.removeData("disabled"); 
     }, 
     error: function() { 
      // there was an error, enable the anchor 
      anchor.removeData("disabled"); 
     } 
    }); 

    return false; 
}); 

Ich habe ein jsfiddle Beispiel: http://jsfiddle.net/wgZ59/76/

1

Für Situationen, in denen Sie Text setzen müssen oder html Inhalt innerhalb eines Anchor-Tags, aber Sie möchten einfach keine Aktion ausführen, wenn auf dieses Element geklickt wird (z. B. wenn Sie möchten, dass eine Paginator-Verknüpfung deaktiviert ist, weil es die aktuelle Seite ist) href. ;)

<a>3 (current page, I'm totally disabled!)</a> 

Die Antwort von @ michael-Wiesen kippte mir dies ab, aber seine war noch Szenarien Adressierung, wo man noch mit jQuery/JS müssen/arbeiten. In diesem Fall wenn Sie die Kontrolle über das Schreiben der HTML selbst haben, einfach x-ing der href-Tag ist alles was Sie tun müssen, so ist die Lösung eine reine HTML-Lösung!

Andere Lösungen ohne jQuery Finagling, die die href beibehalten müssen Sie ein # in die href setzen, aber das führt dazu, dass die Seite nach oben springt, und Sie wollen nur, dass es einfach alt deaktiviert ist. Oder lassen Sie es leer, aber je nach Browser, das macht immer noch Dinge wie zum Anfang, und es ist ungültig HTML nach den IDEs. Aber anscheinend ist ein a Tag vollständig gültiges HTML ohne ein HREF.

Schließlich könnten Sie sagen: Okay, warum nicht einfach das a-Tag als Ganzes dump? Denn oft können Sie nicht, wird das a Tag für Styling Zwecke in der CSS-Framework verwendet, oder steuern Sie verwenden, wie Bootstrap des paginator:

http://twitter.github.io/bootstrap/components.html#pagination

6

Versuchen Sie, die folgenden Zeilen

$("#yourbuttonid").attr("disabled", "disabled"); 
$("#yourbuttonid").removeAttr("href"); 

Coz, auch wenn Sie <a> deaktivieren Tag href funktioniert so müssen Sie auch href entfernen.

Wenn Sie aktivieren möchten versuchen unten Linien

$("#yourbuttonid").removeAttr("disabled"); 
$("#yourbuttonid").attr("href", "#nav-panel"); 
+0

Dies ist genau das, was ich bei der Verwendung von JQuery mit ASP.net MVC ActionLink benötigte. Vielen Dank! – eaglei22

0

Wenn Sie es nicht als ein Anker-Tag verhalten, dann würde ich es vorziehen, es überhaupt zu ersetzen. Zum Beispiel wenn Ihr Anker-Tag ist wie

<a class="MyLink" href="http://www.google.com"><span>My</span> <strong>Link</strong></a> 

dann jquery verwenden Sie dies tun können, wenn Sie Text anstelle eines Links angezeigt werden müssen.

var content = $(".MyLink").text(); // or .html() 
$(".MyLink").replaceWith("<div>" + content + "</div>") 

So können wir einfach Anker-Tag mit einem Div-Tag ersetzen. Das ist viel einfacher (nur 2 Linien) und semantisch korrekte und

7
$('#divID').addClass('disabledAnchor'); 

In CSS-Datei So

.disabledAnchor a{ 
     pointer-events: none !important; 
     cursor: default; 
     color:white; 
} 
+0

Beste Lösung Tq –

1

(weil wir daher eine Verbindung haben, sollten nicht jetzt nicht einen Link benötigen) mit eine Kombination der obigen Antworten, kam ich auf diese.

a.disabled { color: #555555; cursor: default; text-decoration: none; } 

$(".yourClass").addClass("disabled").click(function(e){ e.preventDefault(); 
-1

Deaktivieren oder aktivieren Sie ein beliebiges Element mit der deaktivierten Eigenschaft.

// Disable 
$("#myAnchor").prop("disabled", true); 

// Enable 
$("#myAnchor").prop("disabled", false); 
+0

Warum wird diese Antwort abgelehnt? Es beantwortet die Frage "Wie kann ich einen Anker mithilfe von jQuery aktivieren oder deaktivieren?" – RitchieD

6

Ausgewählte Antwort ist nicht gut.

Verwenden Sie Zeiger-Ereignisse CSS-Stil. (Wie Rashad Annara vorgeschlagen hat)

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

Simple „deaktiviert“ Attribut Hinzufügen um den Job zu verankern tun, wenn Sie wie folgende globale CSS-Regel haben:

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

Auch mit Zeiger-Ereignissen müssen Sie nicht den: Hover-Status als ein Zeiger-Ereignis enthalten. Sie müssen nur den Auswahlschalter a [deaktiviert] einschließen. – TwistedStem

Verwandte Themen