2017-09-09 1 views
0

Ich habe ein seltsames Problem mit Safari auf iOS. Ich benutze jQuery, um ein paar Divs zu manipulieren, sie zu verschieben, sie zu umhüllen und ihnen dynamische Höhen zu geben. In jedem Browser funktionieren diese Änderungen beim ersten Laden der Seite, bei Safari, manchmal ja und manchmal nicht.iOS nicht in der Lage, jQuery DOM Änderungen auf der ersten Seite zu laden

grundsätzlich in Safari, lädt es die Seite ohne irgendwelche Änderungen anzuwenden, dann, wenn ich es aktualisieren, funktioniert es nie, aber wenn ich die URL erneut eingeben, auf der Adressleiste und ich drücke "enter", dieses Mal funktioniert es .

Jetzt löste ich es Wrapping die Funktion, die diese DOM-Manipulationen in einer setTimeout-Funktion auslöst und ich gebe es eine Verzögerung von 400. SO jetzt wartet es 400ms vor dem Abfeuern der Funktion, und auf diese Weise funktioniert es, aber ich don ' Ich mag es so sehr. Ich habe mich gefragt, ob ihr ein besseres System kennt.

mein Code:

$('.wrap-services, .wrap-banner-cta, .wrap-logos, footer').wrapAll('<div class="fixer"></div>'); 
    $('.fixer').insertAfter('.content'); 

    function getHeight() { 

     var imgOffset = $('.wrap-hero-home picture.splash-main img').offset().top; 
     var fixerHeight = $('.fixer').height(); 
      imgHeight = $('.wrap-hero-home picture.splash-main img').height(); 

     $('.fixer').css('top', (imgOffset + imgHeight) + 50); 

     $('.container').height((imgOffset + imgHeight + fixerHeight) + 50); 
    } 


//this is what I use now to prevent that issue 
setTimeout(getHeight, 400); 

Dank

+1

Ist es, dass Sie nur die Seite und alle Assets vollständig geladen werden müssen? Sie können das vielleicht so machen: '$ (window) .load (function() {/ * Etwas tun * /});' –

+0

Ich feuere diese Funktion bereits innerhalb des $ (document) .ready ... Wie auch immer, wahrscheinlich wird dieses Problem verursacht, weil ich nicht weiß, warum in iOS, manchmal, es die Funktion ausführt, bevor das DOM geladen wird – rolfo85

+0

Ich glaube nicht, dass Sie das innerhalb Dokument bereit, aber draußen auf eigene Faust setzen sollen So habe ich es immer benutzt. Vielleicht ist es einen Versuch wert. –

Antwort

1

Technisch wird jQuery bind Methode veraltet, so dass Sie wahrscheinlich on verwenden sollten, wie sie suggerieren:

$(window).on('load', function(){ 
    //Do something 
}); 

in dieser die Noten anzeigen Seite im Zusammenhang mit der Einstellung: http://api.jquery.com/bind/

Wenn Sie eine alte Version von jQuery verwenden, ist es wahrscheinlich egal, dann fahren Sie fort mit bind

Verwandte Themen