2013-01-06 4 views

risposta

23
$(document).ready(function() { 
    var hash = window.location.hash; 
    var link = $('a'); 
    $('a').click(function(e) { 
    e.preventDefault(); 
    hash = link.attr("href"); 
    window.location = hash; 
    }); 
}); 

È inoltre necessario specificare l'argomento evento nella funzione. Denominandolo come e o event e quindi è possibile modificarlo.

+0

Stavo proprio per commentare la mancanza di spiegazione per l'evento mancante, ma eccolo, +1. – adeneo

+0

heheheh: P Non mi mancheranno mai le descrizioni nelle mie risposte: D –

+0

Sfortunatamente, non vi è alcuna azione di salto e nessun aggiornamento di URL. Dopo aver cliccato voglio avere 'jsfiddle.net/ynts/Jgkmt/embedded/result/# anchor'. –

2

È necessario passare l'evento sulla funzione.

  var hash = window.location.hash; 
     var link = $('a'); 
     //pass event here 
     $('a').click(function(e) { 
      e.preventDefault(); 
      hash = "#"+link.attr("href"); 
     }); 
+2

sei in ritardo per la festa –

+0

Ma il tuo sforzo però! –

+0

Sì, mentre stavo scrivendo ho visto che era stata postata un'altra risposta. Buona risposta Aspirante Aqib. – AgnosticDev

3

Si dovrebbe associare un evento onclick per ancorare e specificare return false; di conseguenza. L'istruzione return false; causa un comportamento di clic predefinito (jump) non funzionante. Potete trovare maggiori informazioni qui: How to disable anchor "jump" when loading a page?

+1

In jQuery, potrebbe assomigliare a questo: '' '$ ("un [href = '#']") il ('click', la funzione (evento) { \t \t return false; \t. }); '' ' –

4

Per solo evitare che il "salto" è necessario utilizzare diversi ID per l'elemento di destinazione rispetto a quanto specificato nel ancoraggio.

ad es. per un collegamento ad un nuovo uso scheda,

<a href="#new" /> 

e per l'elemento di destinazione mascherare l'id

<div id="new-tab"></div> 

Poi nello script appendere l'maschera al reale hash, e usarlo per ottenere l'elemento .

$(window).on("hashchange", function(){ 
    var hash = this.location.hash; 
    var mytab = $(hash + "-tab"); 
}); 

Questa conserva cambia la posizione di hash nella cronologia del browser che possono essere controllati dai/pulsanti Avanti e Indietro, e rilevati al caricamento della pagina con l'evento hashchange se l'utente entra nella pagina con le hash specificato.

+1

Grazie mille per questo commento. L'ho fatto molto tempo fa e non riuscivo a capire per tutta la vita di me ricordi cosa ho fatto per risolvere gli stupidi problemi di scorrimento della pagina incrociata. La tua risposta mi ha ricordato il buon vecchio metodo di mascheramento! – Tallboy

+0

Abbastanza elegantemente –

8

Questa è l'unica soluzione che potrei trovare che funzioni in modo coerente su tutti i browser desktop e mobili con varie librerie e framework UI client. Ottenendo le coordinate della finestra prima dello scorrimento, possiamo ripristinare e mantenere la posizione di scorrimento corrente.

$('a').click(function (e) { 
    var x = window.pageXOffset, 
     y = window.pageYOffset; 
    $(window).one('scroll', function() { 
     window.scrollTo(x, y); 
    }) 
}); 
+0

bella risposta, ha fatto il trucco! – V31