2012-08-02 8 views
6

Ho l'ancoraggio predefinito disabilitato se ha una sottocoda di classe come mostrato in this fiddle.event.preventDefault() al primo clic, quindi rimuovere

Voglio solo disabilitato per il primo clic, quindi voglio che la normale funzionalità di ancoraggio venga ripristinata. Qual è il modo migliore per farlo? Ho provato qualcosa che coinvolge il codice qui sotto, ma questo non sembra funzionare?

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

forse qualcosa come questo codice psuedo?

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

oppure c'è un modo migliore per avvicinarsi a questo?

risposta

5

È possibile passare false-one():

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

Passando false invece di un gestore è equivalente a passando un gestore che restituisce false, fermando in modo efficace la propagazione dell'evento e impedendo il suo comportamento predefinito.

questo è spiegato nella documentazione per bind():

In jQuery 1.4.3 ora è possibile passare in false al posto di un gestore di eventi. In questo modo verrà associato un gestore di eventi equivalente a: function() { return false; }.

+0

Questo è molto più semplice di quello che ho avuto grazie. Per la cronaca ho usato $ ("ul> .subnav> a"). Uno ("clic", falso); in modo che interesserebbe solo quel livello e non i bambini. – ak85

+0

Controlla questo http://css-tricks.com/return-false-and-prevent-default/ in teoria sembra ideale, ma quando ho provato questo ho dovuto fare doppio clic per far scattare l'evento click: -/ –

8

Associare il gestore eventi con one()docu. Esegue una volta e si separa automaticamente in seguito.

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

In alternativa è possibile separarlo direttamente nella funzione. E 'bene utilizzare uno spazio dei nomi per questo

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

Il concetto di spazio dei nomi mi ha aiutato ... grazie per la condivisione di buone idee. – Amol

0

questo sarà il lavoro per voi

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

È possibile utilizzare qualcosa di semplice come self-unbind nel gestore di clic.

Qualcosa di simile

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

Modified fiddle

5

Questo metodo funziona bene. Il secondo clic va alla pagina ...

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

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

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

} 
+0

questo mi ha aiutato! nello specifico. 'E.preventDefault(); $ (questo) .unbind (e); 'grazie – breezy

Problemi correlati