2011-01-04 26 views
36

Solo quiero deshabilitar la capacidad de un usuario para hacer clic en un elemento para alguna condición. Aquí es una parte del código que estoy trabajando con:jquery - desactivar haga clic en

 $('#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. 
    } 

}

Respuesta

71

Si está utilizando versiones de jQuery 1.4.3+:

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

Si no es así:

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

¿Hay una manera de cambiar la desactivación de la función de clic en lugar de volver a definirlo? –

20

suponiendo que usa los eventos de clic, solo desvincúlelo.

ejemplo

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

EDIT: ¿Está actualmente obligatorio un evento haciendo clic en tu lista en algún lugar? En base a tu comentario anterior, me pregunto si esto es realmente lo que estás haciendo. ¿Cómo estás habilitando el clic? ¿Es solo un ancla (etiqueta <a>)? Un poco de información más explícita nos ayudará a responder su pregunta.

ACTUALIZACIÓN:

hecho un poco de juego un poco con el: eq() operador. http://jsfiddle.net/ehudokai/VRGfS/5/

Como debería haber esperado es un operador de índice basado en 0. Así que si usted quiere dar vuelta del segundo elemento en su selección, donde su selección es

$("#navigation a") 

sólo tendría que añadir: eq (1) (el segundo índice) y luego .unbind ("clic") Por lo tanto:

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

debe hacer el truco.

Espero que esto ayude!

+0

im vinculando el clic de la siguiente manera: $ ('# navegación a'). Bind ('clic', función (e) {entonces estoy usando la etiqueta . – scifirocket

+0

Oh, vale, eso ayuda mucho. realmente tan simple como agregar la a en el selector, creo. Entonces: $ ('# navegación li: eq (2) a'). unbind ('clic'); – ehudokai

+0

@scifirocket: Por supuesto que estaba equivocado, pero si ves mi actualización anterior, probé esta respuesta :). – ehudokai

5

Puede utilizar el método de desvinculación para eliminar controlador que se ha unido ...

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

Puede comprobar lo que puede desatar hacer? Unbind manual

+0

en realidad, probablemente necesite usar algo como esto "$ ('#navigation li: eq (2)'). unbind ('click'); pero eso tampoco funciona. Estoy tratando de deshabilitar el evento click para un elemento particular de una lista. – scifirocket

+0

@scifirocket: ¿está vinculando un evento de clic en algún lugar de su código? ¿O solo está usando un anclaje que desea desactivar? – ehudokai

10

Raw Javascript puede lograr lo mismo con bastante rapidez también:

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

Supuse que era un error tipográfico, así que agregué el "#" al selector jQuery;) –

+0

Aunque ... el '.onclick' tampoco funcionará en un objeto jQuery. Necesitas '[0]' o '.get (0)'. –

+0

Gracias! Suelo usar JS sin formato. Déjame editar. – Ben

Cuestiones relacionadas