2010-09-24 19 views
37

Tengo algunos enlaces que se muestran en una página. Me gustaría habilitar/deshabilitarlos en base a otros eventos en la página. ¿Hay alguna manera de hacer esto con jQuery?¿Cómo habilito/deshabilito dinámicamente los enlaces con jQuery?

+0

¿Está utilizando html5? o xhtml? – RobertPitt

+0

@robertpitt ¿por qué es relevante? – Yahel

+1

porque si usa html5, puede usar 'data- *' para almacenar datos como cadenas, por lo que podría almacenar el href dentro de 'data-href' y reemplazar el actual con un' # ', luego crear un complemento para alternar esto, como '$ ('. disabled'). DisableClick();' puedes hacerlo con preventDefault pero yo solo iba a explicar una forma para html5. – RobertPitt

Respuesta

57
$('selector_for_links_to_disable').bind('click', function(e){ 
     e.preventDefault(); 
}) 

y para permitir:

$('selector_for_links_to_enable').unbind('click') 
+0

Intentar desvincular mientras sigue siendo la función de enlace no funciona. Luego debes usar "return true;" –

4

Se podría hacer algo como:

$('.links').click(function(e){ 
    if([some conditions]){ 
    e.preventDefault(); 
    } 
}); 

Asegúrese de mostrar que ya no funcionan de alguna manera, de lo contrario los usuarios se confundan, lol.

2

depende de lo que quiere decir con "deshabilitar".

Esto hará que no hacen nada:

$("A").click(function() { return false; }); 
+0

Creo que OP significa cambiarlos de un enlace a un texto para que no aparezcan como enlaces. De lo contrario, ¡acerta! – Chris

+1

return false no es aconsejable. Use e.preventDefault() en su lugar. – dekomote

+0

bueno, aprendes algo nuevo todos los días. Gracias. –

1
$(document).delegate('.links', 'click', function() { 
    if ([your condition is true]) { 
    return false; 
    } 
}) 

delegación es mejor que los manipuladores, porque les puede llamar antes de que el DOM se cargado

1

Usted c un hacer algo como esto:

<script> 
    $(document).ready(function() { 
     $('input#disableall').live('click', function(){ 
      $('a').attr('class', 'disabled'); 
      alert('All links are disabled.'); 
     }); 


     $('input#enableall').live('click', function(){ 
      $('a').attr('class', 'enabled'); 
      alert('All links are enabled.'); 
     }); 

     $('a.disabled').live('click', function(event){ 
      event.preventDefault(); 
     }); 
    }); 
</script> 

<a href='http://www.google.com'>Google<a/> 
<a href='http://www.yahoo.com'>Yahoo<a/> 
<a href='http://www.hotmail.com'>Hotmail<a/> 

<input type='button' id='disableall' value='Disable Links' /> 
<input type='button' id='enableall' value='Enable Links' /> 
0

Cuando estoy dando funciones a los botones por jQuery, me gusta hacer esto:

indice = ''; 

$('myLink').live('click',function() { 
    if (indice !== 'value1'){ 

     // your code 
    } 

    indice = 'value1'; 
    return indice; 

}); 

con esto, se obtiene la función de sólo la primera vez que se pulsa de botón. Ahora solo tiene que establecer un indice diferente de value1 para que su enlace funcione de nuevo

Cuestiones relacionadas