2012-10-21 11 views
34

Ho una pagina con alcune funzioni jQuery. L'HTML nella pagina è simile al seguente:href = "#" Vai all'inizio della pagina - Prevenire?

<a href="#" class="service">Open</a> 

Quando faccio clic sul pulsante Apri, un pannello nascosto scorre. Lo stesso jQuery funziona benissimo, tuttavia quando clicco sul pulsante mi porta anche in cima alla pagina.

È questo il comportamento difettoso e come si impedisce a ogni href="#" di portarmi in cima alla pagina.

Nota: potrei aggiungere id e dire a href di indirizzare a quell'ID. Non voglio farlo per vari motivi (incluso l'aggiunta di codice non necessario).

risposta

50

Nel vostro gestore di eventi, aggiungere e.preventDefault(); (supponendo e è il nome della variabile svolgimento della gara):

$('.service').click(function(e) { 
    e.preventDefault(); 
}); 
+0

Potrebbe anche essere necessario utilizzare 'return false' alla fine del blocco di codice per ignorare il browser predefinito di scorrimento nella parte superiore della pagina. – bafromca

+2

@bafromca: Assolutamente no. Chiamare 'preventDefault' è sufficiente; come suggerisce il nome, impedisce l'azione predefinita (seguendo l'ancora e andando all'inizio della pagina). 'return false' fa anche questo, e fa anche l'equivalente di chiamare' stopPropagation' che, come suggerisce il nome, impedisce all'evento di propagarsi fino agli elementi parent; ma se tutto ciò che si vuole fare è impedire al browser di scorrere in cima alla pagina, non c'è * bisogno * di 'return false'. – icktoofay

19
<a href="#" onclick="return false;" class="service">Open</a> 

O

$(document).ready(function() 
{ 
    var a = $(".service"); 
    a.click(function() 
    { 

     return false; 

    }); 
}); 

O

$(document).ready(function() 
{ 
    var a = $(".service"); 
    a.click(function(e) 
    { 

     e.preventDefault(); 

    }); 
}); 

O

<a href="#" onclick="event.preventDefault();" class="service">Open</a> 
+1

@PHPSeeker Sono contento che ti abbia aiutato. –

+0

la quarta soluzione mi ha aiutato perché non ho accesso allo script js, grazie – FritzB

+0

Mi è piaciuta anche la soluzione in linea :) –

0
$('service').click(function() { 
<your code> 
return false; 
}); 

return false ignora il comportamento standard della ‘un’ tag e ferma il browser di tornare alla parte superiore della pagina quando si fa clic.

47
<a href="#!" class="service">Open</a> 
+0

Funziona bene. Ma puoi aggiungere qualche spiegazione sul motivo per cui funziona? – TheUknown

+1

Penso che questa sia una sintassi di ancoraggio. Scorri fino all'elemento con id = "!" ma elemento con id = "!" non esiste nel documento e il browser non scorre. https://www.w3.org/TR/html4/struct/links.html#h-12.2.1 – MyroslavN

+0

WoW! Soluzione migliore! Molte grazie. Vorrei poterlo sviare di 10 volte! –

Problemi correlati