2017-10-17 117 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

相關問題