2010-02-04 11 views
6

Tengo lo siguiente que deshabilita todos los hipervínculos pero después de un evento quiero volver a habilitarlos, ¿cómo puedo hacer esto?Deshabilitar y habilitar TODOS los hipervínculos usando JQuery

$("a").click(function() { return false; }); 

No creo que sea tan simple como solo establecerlo en verdadero. ;)

Gracias a todos

+0

Todas las respuestas correctas, pero tenía que darle a puntiagudas para señalar que la punta hacia fuera - sin juego de palabras! – Abs

+0

¿Esto ocurrirá con frecuencia? Según lo entiendo, el enlace/desvinculación requiere un poco de sobrecarga. Dependiendo de la página, puede que no sea la mejor manera de hacerlo. – user113716

+0

http://www.bennadel.com/blog/1771-Enable-and-Disable-jQuery-Event-Handlers-Rather-Than-Bind-And-Unbind-.htm – user113716

Respuesta

17

En lugar de unirse a su "clic" manipulador de esa manera, hacer esto:

$('a').bind("click.myDisable", function() { return false; }); 

Luego, cuando se desea eliminar ese controlador es fácil:

$('a').unbind("click.myDisable"); 

esa manera a evitar estropear otras cosas que podrían estar obligadas a "hacer clic". Si acaba de destrabar "clic", desvinculará todo lo vinculado a ese evento.

edición en 2014 — la forma en que ates eventos que ahora está con .on():

$('a').on('click.myDisable', function() { return false; }); 

Probablemente sería mejor hacer esto:

$('a').on('click.myDisable', function(e) { e.preventDefault(); }); 

para desenlazar:

$('a').off('click.myDisable'); 

Finalmente, usted co ULD enlazar un controlador al cuerpo del documento y hacer frente a <a> etiquetas que se agregan de forma dinámica:

$('body').on('click.myDisable', 'a', function(e) { e.preventDefault(); }); 

// to unbind 

$('body').off('click.myDisable'); 
+0

Gracias por ese consejo, no lo hago ¡quiero ensuciar todo lo demás! – Abs

+0

¿vincula una función que devuelve falso detener a cualquier otro manejador enlazado después de ejecutarlo? ¿No es necesario detener la propagación del evento? –

+0

Esto es una especie de "culto a la carga", pero cuando realmente quiero matar el evento, lo hago: return !! event.stopPropagation() && false; – Pointy

0

Usted debe ser capaz de desvincularla.

$("a").unbind("click"); 
0
var disableLink = function(){ return false;}; 
$('a').bind('click', disableLink); 

para restaurar:

$('a').unbind('click', dsiableLink); 
0

que podría desenlazar el controlador de clic:

$('a').unbind('click') 
5

Pruebe esto:

// Better to use the live event handler here, performancewise 
$('a').live('click', function() {... return false;}); 

// Now simply kill the binding like this 
$('a').die('click'); 

bye

+0

Tuve problemas con el uso de live() en IE9, y también está en desuso, así que considere usar una solución diferente si necesita soportar IE9 o menos. –

4

unión y separación toma algo de sobrecarga.

Una solución diferente sería agregar una clase como disabled, luego usar hasClass('disabled') para probar y ver si debe o no devolver false.

$('a').addClass('disabled'); 
$('a').click(function() { 
    if($(this).hasClass('disabled')) 
     return false; 
}); 
0
$(function(){ 


    $.myStopAnchor = function(){ 
     $stop = true; 
    } 

    $.myNoStopAnchor = function(){ 
     $stop = false; 
    } 

    $.myNoStopAnchor(); 

    $("a").click(function(ev) { 
     if ($stop){ 
     ev.stopPropagation() 
     } 
     return !$stop; 
    }); 

}); 
0

O mejor aún, simplemente alternar el display de un elemento grande con el alto z-index. En el siguiente ejemplo, el div cubre el cuerpo.

var link = document.getElementsByTagName('a')[2]; 
 
var noclick = document.getElementById('noclick'); 
 

 
link.onclick = function() { 
 
    noclick.className = 'on'; 
 
}
#noclick { 
 
    display: none; 
 
    position: absolute; 
 
    left: 0px; 
 
    right: 0px; 
 
    top: 0px; 
 
    bottom: 0px; 
 
    /* Make sure this floats over content */ 
 
    z-index: 100; 
 
} 
 

 
#noclick.on { 
 
    display: block; 
 
}
<body> 
 
    <div id="noclick"></div> 
 
    <a href="#">one</a> 
 
    <a href="#">two</a> 
 
    <a href="#">three</a> 
 
</body>

+0

¿Por qué downvote sin explicación? He usado este método en múltiples situaciones con éxito. Esta respuesta está alineada con la pregunta. –

+0

Por favor, da un ejemplo de cómo hacerlo. –

+1

@DEVELOPER Espero que ayude. –

0

Otra forma, si desea que el estrictamente url para ser inaccesible, así, puede quitar href atributo de etiqueta a. Algo así:

$('a').removeAttr('href'); 

cambiar adicionalmente el color del texto y el cursor onhover:

$('a').css('color', '#333'); 
$('a').hover(function() { 
     $(this).css('cursor', 'not-allowed'); 
); 
Cuestiones relacionadas