2017-06-14 58 views
1

正如標題所述,我寫了一個ajax函數,該函數應滾動到用戶在重定向之前的位置。重定向後不保存滾動位置的Ajax函數

我爲測試場景寫了一個alert,它確實觸發了,但滾動一直回到頂端,我在這裏做錯了嗎?

的JavaScript:

$.ajax({ 
     type: "GET", 
     url: "AdminListUsers.aspx?column=Disabled&direc=False&a=chstat&z=+", 
     success: function loadDoc() { 
      window.scrollTo(window.pageXOffset, window.pageYOffset); 
     } 
    }); 

C#:

var toggleUrl = "AdminListUsers.aspx?column=" + (IsClicked.FirstOrDefault().Key ?? "Name") + "&direc=" + (IsClicked.FirstOrDefault().Value) + "&a=chstat&q=" + id.ToString() + "&d=" + disabled + "&z=" + Server.UrlEncode(txtSearchFor.Text); 

var hl = new HyperLink(); 
hl.Text = status; 
hl.Style.Add(HtmlTextWriterStyle.Color, (disabled ? "red" : "green")); 
hl.NavigateUrl = toggleUrl; 
hl.Attributes.Add("onclick", "loadDoc();return true;"); 
cell.Controls.Add(hl); 
tr.Cells.Add(cell); 
+0

刪除'success'處理程序中的所有'xhttp'引用和'if'語句。只需將'window.scrollTo()'調用放在那裏。 –

+0

@RoryMcCrossan看看更新後的問題。這是你的意思嗎?因爲這也不起作用。 – andrekordasti

+0

是的,這至少在語法上是正確的。當你說它不起作用時,會發生什麼? –

回答

1

的問題是,因爲它的實際導航到超鏈接中指定的鏈接。然後它也試圖做ajax請求。

如果要使用ajax,則不需要指定navigateURL,並且超鏈接的默認行爲需要被腳本抑制。否則,您將同時刷新整個頁面一個jQuery ajax請求。既然你已經有了jQuery的安裝,你可以做到這一點最容易像這樣:

C#:

var hl = new HyperLink(); 
hl.Text = status; 
hl.ID = "myLink"; 
hl.Style.Add(HtmlTextWriterStyle.Color, (disabled ? "red" : "green")); 
hl.NavigateUrl = "#"; 
cell.Controls.Add(hl); 
tr.Cells.Add(cell); 

JS(使用不顯眼的事件處理):

$(document).ready(function() { 
    $("#<%= myLink.ClientID %>").click(function(event) { 
    event.preventDefault(); //stop the normal behaviour of the link 
    $.ajax({ 
     type: "GET", 
     url: "AdminListUsers.aspx?column=Disabled&direc=False&a=chstat&z=+", 
     success: function() { 
     window.scrollTo(window.pageXOffset, window.pageYOffset); 
     } 
    }); 
    }); 
}); 

這將停止從鏈接導致整個頁面被重定向,並允許通過ajax加載內容。

N.B.如果要在表中創建超鏈接的多個實例,則需要使用類而不是ID來允許jQuery找到它。

不過,我會質疑什麼 「AdminListUsers.aspx?列=禁用&直銷=假& A = chstat & Z = +」 實際上返回。 asmal頁面返回一個完整的HTML頁面,包括<html>,<body>標籤等 - 如果你把它放在另一個元素如<div>中,它會使你的頁面無效 - 你不能嵌套<html>標籤。如果你想使用ajax,你應該使用WebMethod(或其他類型的webservice)來只返回實際上應該插入元素的HTML。

+0

我無法在$(「#<%= myLink.ClientID%>」)的代碼隱藏中訪問我的任何變量。怎麼來的? – andrekordasti

+0

我不知道這是什麼意思?你爲什麼期望從JavaScript訪問代碼隱藏變量?你想做什麼? – ADyson

+0

嗯,我不能解決JavaScript中的'myLink',那麼我應該放在那裏? – andrekordasti