2017-10-17 115 views
1

我想将页面滚动到DIV,其ID是通过QueryString发送的。该页面的HTML内容从服务器端加载到SharePoint 2010使用JQuery滚动到DIV页面加载后不工作

我已经使用setTimeout()等待内容加载到页面上,超时后我正在应用逻辑滚动到div。但该页面不滚动。代码如下:

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]; 
    } 
} 

你可以请建议我失踪?

在此先感谢。

回答

2

我找到我的问题的解决方案。我们可以使用简单的JavaScript代替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" 将努力向下滚动到页面上特定的div。

1

没有必要编写自己的函数来等待页面加载。有一个jQuery的功能:.ready()

你的滚动代码似乎与虚拟代码工作正常。这可能对你更好一些:

$(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]; 
    } 
} 

这是假设getQueryStringParameter返回正确的值。我无法知道这一点,因为它取决于您的后端和正在使用的URL。

+0

感谢您的回复,但我必须使用setTimeout,因为此代码正在SharePoint中使用,并且我检索的数据来自SharePoint列表,因此服务器端代码需要时间加载,而此JavaScript首先运行。所以当这个脚本运行时,它没有找到DIV。 –

+0

完成加载页面需要6到7秒,之后我必须运行这个JavaScript函数。 –

+0

@RahulGokani .ready应该在dom准备好之前阻止代码执行。你是用javascript动态添加div还是硬编码到页面中? – Hendeca

相关问题