0

我知道有很多关于此的帖子,但我整天都在寻找这样做。我在这里尝试实现的是单击 GridView 中的一行,然后将页面滚动到该位置,就像 html 中的锚点一样。

这是我用来滚动的链接。我在我的 js 文件中调用了一个函数。这是在我的 GridView 中。

<asp:LinkButton runat="server" OnClientClick="window.scrollTo(0, GetPosition(this))" CommandName="select" ID="InkSelect" Text="SELECT" />

然后,我在我的 js 文件中调用这个函数,像这样链接,以防万一:

<script type="text/javascript" src="~js/monjs.js"></script>

在 monjs.js 中,函数如下:

function GetPosition(element) {
var top = 0;
var e = document.getElementById(element);
while (e.offsetParent != undefined && e.offsetParent != null) {
    top += e.offsetTop + (e.clientTop != null ? e.clientTop : 0);
    e = e.offsetParent;
}
return top;}

而 Visual Studio 突出显示了这一行:

...... <a onclick="window.scrollTo(0, GetPosition(this));" .....

我尝试了许多其他方法来做到这一点,在 vb 文件中注册一个脚本,在 onclick 属性中硬编码 window.scrollTo(0,100),我没有想法。我试过row.focus,不要提这个。谢谢。 在此处输入图像描述

4

2 回答 2

3
 <a onclick="window.scrollTo(0, GetPosition(this));" 
                                              ^
                                              |
                                            An Object    
function GetPosition(element) {
    var top = 0;
    var e = document.getElementById(element);
                                      ^
                                      |
                                Expecting a string

您正在传递一个对象并表现得像一个字符串。

var e = document.getElementById(element);

需要是

var e = element;

如果您的函数需要同时处理对象或字符串,您可以使用this.idonclick 处理程序传入

OnClientClick="window.scrollTo(0, GetPosition(this.id))"

或进行类型检查。

 var e = typpeof element === "string" ? document.getElementById(element) : element;
于 2013-01-15T21:49:43.160 回答
0

好的,我设法做某事。经过多次尝试......我在我的 aspx 文件中使用了这个:

<asp:LinkButton runat="server" OnClientClick="return Move(this);" CommandName="select" ID="_row" Text="SELECT" />

在我的 aspx.vb 文件中,我在页面加载功能中使用了它:

Dim myScriptName As String = "MovePageScript"
    If (Not ClientScript.IsClientScriptBlockRegistered(Page.GetType(), myScriptName)) Then
        Dim myScript As New StringBuilder()
        myScript.Append("<script type=""text/javascript""> function Move(element) {")
        myScript.Append("var top = 0;")
        myScript.Append("var e = typeof element === 'string' ? document.getElementById(element) : element;")
        myScript.Append("while (e.offsetParent != undefined && e.offsetParent != null) {")
        myScript.Append("top += e.offsetTop + (e.clientTop != null ? e.clientTop : 0);")
        myScript.Append("e = e.offsetParent; }")
        myScript.Append("window.scrollTo(0, top);")
        myScript.Append("return false;")
        myScript.Append("} </script>")
        ClientScript.RegisterClientScriptBlock(Page.GetType(), myScriptName, myScript.ToString(), False)
    End If

并在我的 web.config 文件中使用它:

<pages maintainScrollPositionOnPostBack="true">

它取消了对行的选择,但至少它可以工作......我现在必须检查是否可以让它与 Telerik 的 Ragrid XD 一起使用

于 2013-01-16T14:52:02.923 回答