2017-10-17 11 views
1

J'essaye de faire défiler la page à DIV, dont l'ID est envoyé par QueryString. Le contenu HTML de la page est chargé du côté serveur dans SharePoint 2010.Faites défiler jusqu'à DIV en utilisant JQuery ne fonctionne pas après le chargement de la page

J'ai utilisé setTimeout() pour attendre que le contenu soit chargé sur la page et après expiration du délai j'applique la logique pour faire défiler jusqu'à div. Mais la page ne défile pas. Code est comme ci-dessous:

ExecuteOrDelayUntilScriptLoaded(getThankyouMsg, 'sp.js'); 

function getThankyouMsg() { 
    var fid = getQueryStringParameter("fid"); 
    setTimeout(function() { 
     //window.location.href = window.location.href.split('?')[0] + "#" + fid; 
     jQuery('html, body').animate({ 
      scrollTop: jQuery("#" + fid).offset().top 
     }, 2000); 
    }, 7000); 
} 

function getQueryStringParameter(paramToRetrieve) { 
    var params = document.URL.split("?")[1].split("&"); 
    for (var i = 0; i < params.length; i = i + 1) { 
     var singleParam = params[i].split("="); 
     if (singleParam[0] == paramToRetrieve) 
      return singleParam[1]; 
    } 
} 

Pouvez-vous s'il vous plaît suggérer ce que je suis absent?

Merci d'avance.

Répondre

2

Je trouve une solution à ma question. Nous pouvons utiliser JavaScript simple au lieu de la fonction jQuery animate.

ExecuteOrDelayUntilScriptLoaded(getThankyouMsg, 'sp.js'); 

function getThankyouMsg() { 
    var fid = getQueryStringParameter("fid"); 
    setTimeout(function() { 
     location.hash = "#"+fid; //This line will navigates to Div ID 
    }, 7000); 
} 

function getQueryStringParameter(paramToRetrieve) { 
    var params = document.URL.split("?")[1].split("&"); 
    for (var i = 0; i < params.length; i = i + 1) { 
     var singleParam = params[i].split("="); 
     if (singleParam[0] == paramToRetrieve) 
      return singleParam[1]; 
    } 
} 

Location.Hash = "#divId" travaillera pour faire défiler jusqu'à div notamment sur la page.

1

Vous n'avez pas besoin d'écrire votre propre fonction pour attendre le chargement de la page. Il y a une fonction jQuery pour cela: .ready()

Votre code de défilement semble fonctionner correctement avec le code fictif. Cela pourrait fonctionner un peu mieux pour vous:

$(document).ready(function() { 
    getThankyouMsg(); 
}); 

function getThankyouMsg() { 
    var fid = getQueryStringParameter("fid"); 
    jQuery('html, body').animate({ 
     scrollTop: jQuery("#" + fid).offset().top 
    }, 2000); 
} 

function getQueryStringParameter(paramToRetrieve) { 
    var params = document.URL.split("?")[1].split("&"); 
    for (var i = 0; i < params.length; i = i + 1) { 
     var singleParam = params[i].split("="); 
     if (singleParam[0] == paramToRetrieve) 
      return singleParam[1]; 
    } 
} 

qui est en supposant que getQueryStringParameter renvoie la valeur correcte. Il n'y a aucun moyen pour moi de le savoir car cela dépend de votre backend et de l'URL utilisée.

+0

Bonjour Merci pour la réponse, Mais je dois utiliser setTimeout car ce code est utilisé dans SharePoint et les données que je récupère proviennent de la liste SharePoint, donc le code côté serveur prend le temps de charger, alors que JavaScript commence. Donc, quand ce script a été lancé, il n'a pas trouvé DIV. –

+0

Il faut 6 à 7 secondes pour charger complètement la page, et après cela, je dois exécuter cette fonction JavaScript. –

+0

@RahulGokani .ready devrait empêcher l'exécution du code avant que dom ne soit prêt. Est-ce que vous ajoutez dynamiquement le div avec javascript ou est-ce codé en dur dans la page? – Hendeca