2012-04-11 15 views
1

Ich habe das folgende jquery-Skript, um einen Link zu einer neuen Seite zu öffnen und einen Scroll-Effekt zu haben. Allerdings kann ich es in Firefox 11.0 nicht zum Laufen bringen.Jquery setTimeout funktioniert nicht in Firefox 11.0

var jump = function (e) { 
    if (e) { 
     e.preventDefault(); 
     var target = $(this).attr("href"); 
    } else { 
     var target = location.hash; 
    } 

    $('html,body').animate(
{ 
    scrollTop: $(target).offset().top 
}, 2000, function() { 
    location.hash = target; 
}); 

} 

$('html, body').hide(); 

$(document).ready(function() { 
    $('a[href^=#]').bind("click", jump); 

    if (location.hash) { 
     setTimeout(function() { 
      $('html, body').scrollTop(0).show(); 
      jump(); 
     }, 1000); 
    } else { 
     $('html, body').show(); 
    } 
}); 

Es bleibt nur eine Schleife über diesen Teil von setTimeout und beginnt dann wieder am Anfang.

$('html, body').scrollTop(0).show(); 
jump(); 

Und das passiert nur in Firefox 11.0 Weiß jemand, wie man das oder eine Arbeit um zu beheben?

+0

setTimeout() ist eine native JavaScript-Funktion, nicht jQuery-spezifisch. – Spudley

+0

Ich bin ein wenig verwirrt darüber, was genau passiert ist, sollte nicht sein. Können Sie eine Datei erstellen, um dies zu reproduzieren? – idrumgood

+0

Ich benutze asp.net mvc, also nicht sicher, ob es mit jsfiddle funktioniert. Aber ich habe es live auf einem meiner Links auf unserer Website, wenn das hilft. www.hovdenoil.com schweben über Schmierstoffe und klicken Sie lubriplate –

Antwort

0

Der Fehler lag im MVC-Framework. Petr Vostrel war derjenige, der es entdeckte, also gebe ich ihm die Ehre. Hier ist was er gefunden hat.

Die MicrosoftAjax-Komponente, versucht einige Browser-Verlaufsverwaltung und es verwendet den Hash-Teil der URL für diese Angelegenheit, die eine gültige Standardprozedur ist, bis zu diesem Zeitpunkt. Zur Initialisierungszeit aktiviert Sys$_Application$initialize() bis _navigate() die _raiseNavigate() Anwendungsmethode. Und dieser hat einige Tänze speziell für Firefox:

// Name:  MicrosoftAjax.debug.js 
// Assembly: System.Web.Extensions 
// Version:  4.0.0.0 
// FileVersion: 4.0.20526.0 

if ((Sys.Browser.agent === Sys.Browser.Firefox) && window.location.hash && 
(!window.frameElement || window.top.location.hash)) { 
window.history.go(0); 
} 

drei Bedingungen:

browser is Firefox 
address carries a hash portion after the URL 
it is not inside a frame 

von ihnen in Ihrem Fall passieren All und das Tier losgelassen wird:

window.history.go(0); 

Das Browser anweist History Manager, um nach der als Argument angegebenen Entfernung vor- oder zurückzublättern. -2 geht einen Schritt zurück, 1 geht einen Schritt weiter. Daher lädt 0 die Seite effektiv neu. Und es wird auf jeder Seite für jeden Hash der Seite geladen. Ich kann mir sowieso keinen gültigen Zweck dieser Linie vorstellen ...

Sicher genug, wenn ich diese eher haarigen und sinnlosen Zeilen kommentiere, es funktioniert! Es scheint ein Rückwärtskompatibilitätsversuch für Firefox 3.5 oder niedriger zu sein, also würde ich sagen, dass es dein MVC entfernen oder besser aktualisieren soll.

1

versuchen Sie mit window.setTimeout, wie ich denke, so sollte es heißen. Außerdem verwenden Sie eine Zeitüberschreitung von 0, also warum?

+0

Ich verwendete 0 nur, weil ich es sofort laden wollte, aber vielleicht ist das nicht die richtige Logik –

+0

Ich versuchte 1000, 2000 usw. Egal welche Nummer ich setzen Sie es immer noch tut es –

+0

Ich benutze asp.net mvc, also nicht sicher, ob es mit jsfiddle funktioniert. Aber ich habe es live auf einem meiner Links auf unserer Website, wenn das hilft. www.hovdenoil.com schweben über Schmierstoffe und klicken Sie auf Gleitmittel –

0

Mit setTimeout mit einem Timeout von 0 ist im Grunde genommen, als ob Sie nicht setTimeout überhaupt verwendet haben, und ich denke, Firefox nicht gefällt.

+0

Ich probierte 1000, 2000 usw. Egal welche Nummer ich eintrage tut es immer noch –

+0

Ich meine, versuchen Sie nicht 'setTimeout' überhaupt zu verwenden. –

Verwandte Themen