2011-01-04 17 views
36

Voglio solo disabilitare la possibilità per un utente di fare clic su un elemento per alcune condizioni. Ecco parte del codice con cui sto lavorando:jquery - disable click

 $('#navigation a').bind('click',function(e){ 

    var $this = $(this); 
    var prev = current; 

    current = $this.parent().index() + 1; // store the position in current 

    if (current == 1){ 
    $("#navigation a:eq(1)").unbind("click"); // i want to disable the ability to click this element if current is 1 
    } 
    if (current >= 2){ 
    $("#navigation a:eq(1)").bind("click"); // this is wrong, but I want to rebind the click if current is greater than 1. 
    } 

}

risposta

71

Se stai usando jQuery versioni 1.4.3+:

$('selector').click(false); 

In caso contrario:

$('selector').click(function(){return false;}); 
+13

Esiste un modo per attivare disabilitando la funzione click invece di ridefinire esso? –

20

presupponendo che si stiano utilizzando eventi click, è sufficiente separarlo.

esempio

if (current = 1){ 
    $('li:eq(2)').unbind("click"); 
} 

EDIT: Sei attualmente vincolante un evento clic nell'elenco da qualche parte? Sulla base del tuo commento sopra, mi chiedo se questo è davvero quello che stai facendo? Come stai abilitando il clic? È solo un'ancora (tag <a>)? Un po 'più di informazioni esplicite ci aiuteranno a rispondere alla tua domanda.

UPDATE:

fatto un po 'di gioco in giro con il: eq dell'operatore(). http://jsfiddle.net/ehudokai/VRGfS/5/

Come avrei dovuto prevedere è un operatore di indice basato su 0. Quindi, se si desidera attivare del secondo elemento nella selezione, dove la selezione è

$("#navigation a") 

si dovrebbe semplicemente aggiungere: eq (1) (il secondo indice) e poi .unbind ("click") in modo da:

if(current == 1){ 
    $("#navigation a:eq(1)").unbind("click"); 
} 

Dovrebbe fare il trucco.

Spero che questo aiuti!

+0

legando il clic in un modo come questo: $ ('# navigation a'). Bind ('click', function (e) {quindi sto usando il tag . – scifirocket

+0

Oh, ok, questo aiuta molto. davvero semplice come aggiungere l'a sul selettore, quindi: $ ('# navigation li: eq (2) a'). unbind ('click'); – ehudokai

+0

@scifirocket: Certo che ho sbagliato, ma se vedi il mio aggiornamento sopra, ho provato questa risposta :). – ehudokai

5

È possibile utilizzare il metodo Unbind per rimuovere gestore che è stato attaccato ...

if (current = 1){ 
    $('li:eq(2)').unbind('click'); 
} 

È possibile controllare ciò che può sciogliere fare? Unbind manual

+0

in realtà, probabilmente bisogno di usare qualcosa come questo" $ ('#navigation li: eq (2)'). unbind ('click'); ma non funziona. Sto cercando di disabilitare l'evento click su un particolare elemento di una lista. – scifirocket

+0

@scifirocket: stai vincolando un evento click da qualche parte nel tuo codice? O stai semplicemente usando un'ancora che vuoi disabilitare? – ehudokai

10

Raw Javascript può ottenere la stessa cosa anche abbastanza rapidamente:

document.getElementById("myElement").onclick = function() { return false; } 
+1

Ho pensato che fosse un refuso, quindi ho aggiunto il "#" al selettore jQuery;) –

+0

Anche se ... il '.onclick' non funzionerà nemmeno su un oggetto jQuery. Hai bisogno di '[0]' o '.get (0)'. –

+0

Grazie! Di solito uso JS non elaborato. Fammi modificare – Ben