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.id、onclick ハンドラーで渡すことができます。

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

または typeof チェックを行います。

 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 に答える