2012-08-02 18 views
6

Ich habe die Standard-Anker deaktiviert, wenn es eine Klasse Subnav wie in this fiddle gezeigt hat.event.preventDefault() beim ersten Klick und dann entfernen

Ich möchte nur deaktiviert für den ersten Klick, dann möchte ich die normale Ankerfunktionalität zurückgebracht werden. Was ist der beste Weg, dies zu tun? Ich habe versucht, etwas mit dem folgenden Code, aber das schien nicht zu funktionieren?

$(this).unbind(event.preventDefault()); 

vielleicht so etwas wie dieser Pseudo-Code?

if (click count === 0) { 
    event.preventDefault(); 
} 

oder gibt es eine bessere Möglichkeit, dies zu erreichen?

Antwort

5

Sie können false-one() passieren funktioniert:

$(".subnav a").one("click", false); 

Passing false statt eines Handler äquivalent zu Übergeben eines Handlers, der false zurückgibt, wodurch die Weitergabe des Ereignisses effektiv gestoppt und sein Standardverhalten verhindert wird.

Dies wird in der Dokumentation für bind() erklärt:

In jQuery 1.4.3 Sie jetzt in false anstelle eines Ereignisses Handler passieren kann. Dadurch wird ein Ereignishandler wie folgt gebunden: function() { return false; }.

+0

Das ist viel einfacher als das, was ich dank hatte. Für den Datensatz habe ich $ ("ul> .subnav> a") verwendet. Eins ("click", false); so dass es nur dieses Niveau und nicht Kinder beeinflussen würde. – ak85

+0

Überprüfen Sie dies http://css-tricks.com/return-false-and-prevent-default/ in der Theorie klingt es ideal, aber wenn ich das versuchte, musste ich doppelt klicken, um das Click-Ereignis zu schießen: -/ –

8

Binden Sie den Ereignishandler mit one()docu. Es wird einmalig ausgeführt und danach automatisch wieder gelöst.

$(".subnav a").one("click", function(event) { 
    event.preventDefault(); 
}); 

Alternativ können Sie es auch direkt in der Funktion losbinden. Es ist gut, einen Namespace zu verwenden, für die

$(".subnav a").bind("click.myclick", function(event) { 
    event.preventDefault(); 
    $(this).unbind(".myclick"); 
}); 
+1

Namensraum-Konzept hat mir geholfen..danke für den Austausch von guten Ideen. – Amol

0

dies für Sie

$("#elementid").bind("click", function(event) { 
    alert("This will be displayed only once."); 
    event.preventDefault(); 
    $(this).unbind(event); 
}); 
0

Sie könnten etwas so einfach wie selbst in der Click-Handler binden.

So etwas wie

function stopEventOnce(event) { 
    event.preventDefault(); 
    $(this).unbind('click',stopEventOnce); 
    return false; 
} 
$(".subnav a").bind('click', stopEventOnce); 

Modified fiddle

5

Das funktioniert gut. Der zweite Klick geht auf die Seite ...

$(".smallNavigation > ul > li > a").click(function (e) { 

    $("ul.sub-menu").hide(); 
    $("ul.sub-menu", $(this).parent("li")).show(); 

    e.preventDefault(); 
    $(this).unbind(e); 

} 
+0

das hat mir geholfen! speziell. 'e.preventDefault(); $ (das) .unbind (e); Danke – breezy

Verwandte Themen