2013-01-15 421 views
0

我知道有很多關於此的帖子,但我一直在尋找這一整天。 我在這裏嘗試獲得的是點擊GridView中的一行,然後將頁面滾動到該位置,就像在html中的錨點一樣。window.scrollTo(...)錯誤:Microsoft JScript運行時錯誤:對象預計

這是我用來滾動的鏈接。我在我的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,別提這個。 謝謝。 enter image description here

+0

NITPICK:'e'是一個通常用於異常或事件對象的變量。大多數開發人員將使用elem,element或anchor來完成你正在做的事情。 – epascarello

回答

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

012工作
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))" 

或做類型檢查。

var e = typpeof element === "string" ? document.getElementById(element) : element; 
+0

感謝您的回答。我無法得到這個工作壽。我在同一行上遇到同樣的錯誤。我嘗試了typeof,併發送this.id但沒有工作。我想知道,在我的aspx文件中,我將window.scrollTo放到OnClientClick中,在運行時,錯誤在onclick中給出。如果這可能是相關的,或者是因爲選擇命令導致的,那麼就在這裏。 – Sophie

+0

我試圖使用'OnClientClick =「窗口。scrollTo(0,200)「'它工作得很好......我嘗試刪除參數OnClientClick =」window.scrollTo(0,GetPosition())「'這也觸發了錯誤。文章得到這個工作[鏈接](http://www.aspsnippets.com/Articles/Get-ASPNet-GridView-SelectedRow-when-clicked-using-JavaScript.aspx) – Sophie

相關問題