2010-09-24 1 views
37

Ho alcuni collegamenti visualizzati su una pagina. Vorrei abilitarli/disabilitarli in base ad altri eventi nella pagina. C'è un modo per farlo con jQuery?Come abilitare/disabilitare dinamicamente i collegamenti con jQuery?

+0

stai usando html5? o xhtml? – RobertPitt

+0

@robertpitt perché è rilevante? – Yahel

+1

perché se si utilizza html5 allora si può usare 'data- *' per memorizzare i dati come stringhe, in modo da poter memorizzare l'href all'interno di 'data-href' e sostituire la corrente con un' # ', quindi creare un plugin per attivare questo, come '$ ('. disabled'). DisableClick();' puoi farlo con preventDefault ma stavo solo spiegando un modo per html5. – RobertPitt

risposta

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

e per l'abilitazione:

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

Cercare di separare mentre è ancora la funzione di collegamento non funziona. Quindi devi usare "return true;". –

4

Si potrebbe fare qualcosa di simile:

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

Assicurarsi di dimostrare che non funzionano più in qualche modo, in caso contrario i vostri utenti confondersi, lol.

2

dipende da cosa intendi per "disabilita".

questo renderà loro non fanno nulla:

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

Penso che OP significhi cambiarli da un collegamento al testo in modo che non appaiano come link. Altrimenti spot! – Chris

+1

return false non è consigliato. Utilizzare invece e.preventDefault(). – dekomote

+0

bene, impari qualcosa di nuovo ogni giorno. Grazie. –

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

delegazione è meglio che i gestori, in quanto è possibile chiamare prima il DOM è caricato

1

Si c un fare qualcosa di simile:

<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

Quando mi sto dando funzioni ai pulsanti di jQuery, mi piace fare questo:

indice = ''; 

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

     // your code 
    } 

    indice = 'value1'; 
    return indice; 

}); 

con questo, si ottiene la funzione solo la prima volta che si preme de pulsante. Ora devi solo impostare indice diverso da value1 al tuo link funziona di nuovo