2010-09-24 15 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

Problemi correlati