2010-02-04 14 views
6

Ho il sotto che disabilita tutti i collegamenti ipertestuali, ma dopo un evento voglio riattivarli tutti di nuovo, come posso fare questo?Disabilita e abilita TUTTI i collegamenti ipertestuali usando JQuery

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

Non penso che sia semplice come impostarlo su true. ;)

Grazie a tutti

+0

Tutte le risposte corrette, ma ho dovuto dare a punta per la segnalazione punta fuori - senza giochi di parole! – Abs

+0

Questo avverrà frequentemente? A quanto ho capito, il binding/unbinding richiede un po 'di overhead. A seconda della pagina, potrebbe non essere il modo migliore per andare. – user113716

+0

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

risposta

17

Invece di legare il vostro "click" gestore che modo, fare questo:

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

Poi, quando si desidera rimuovere tale gestore è facile:

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

In questo modo si evita rovinare altre cose che potrebbero essere legate al "clic". Se ti limiti a "cliccare", non ti leghi a tutto ciò che è legato a quell'evento.

modifica nel 2014 — il modo in cui si associa gli eventi ora è con .on():

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

Probabilmente sarebbe meglio per fare questo:

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

Per separare:

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

Infine, voi co ULD associare un gestore per il corpo del documento e trattare con <a> tag che vengono aggiunti in modo dinamico:

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

// to unbind 

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

Grazie per il suggerimento - Non lo faccio vuoi rovinare tutto! – Abs

+0

esegue il binding di una funzione che restituisce false interruzioni dopo l'esecuzione di altri gestori associati? Non hai anche bisogno di interrompere la propagazione dell'evento? –

+0

Questa è una sorta di "cargo setter", ma quando voglio davvero uccidere l'evento che faccio: return !! event.stopPropagation() && false; – Pointy

0

Si dovrebbe essere in grado di sciogliere esso.

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

ripristinare:

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

si poteva separare il gestore di clic:

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

Prova questo:

// 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'); 

ciao

+0

Ho riscontrato problemi con l'utilizzo di live() in IE9 ed è anche deprecato, quindi considera di utilizzare una soluzione diversa se devi supportare IE9 o meno. –

4

Il rilegatura e lo slegamento richiedono un sovraccarico.

Una soluzione diversa sarebbe quella di aggiungere una classe come disabled, quindi utilizzare hasClass('disabled') per verificare e vedere se deve restituire o meno 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 meglio, modificano semplicemente lo display di un elemento di grandi dimensioni con l'alta z-index. Nell'esempio seguente, il div copre il corpo.

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

Perché il downvote senza spiegazione? Ho usato questo metodo in più situazioni con successo. Questa risposta è allineata alla domanda. –

+0

Si prega di dare un esempio come farlo. –

+1

@DEVELOPER Spero che questo aiuti. –

0

Un altro modo, se si vuole rigorosamente l'URL da inaccessibile così, è possibile rimuovere href attributo dal a tag. Qualcosa del genere:

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

additionaly cambiando il colore del testo e onhover cursore:

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