2017-06-14 21 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