将焦点放在控件上,但滚动到不同的控件

时间:2014-11-12 16:13:53

标签: asp.net

回发后,我希望我的页面专注于gridview的子控件,但将页面滚动到另一个部分。 标准的myGridView.Focus(),在Page_Load或Page_prerender上调用,插入一个

WebForm_AutoFocus('myGridViewClientID');

在渲染的html中。 此功能还将滚动移动到所需位置

有什么建议吗?

我的尝试:使用Asp.NET注入的一些函数:

function FocusWithoutScroll(focusId) {
    var targetControl;
    if (__nonMSDOMBrowser) {
        targetControl = document.getElementById(focusId);
    }
    else {
        targetControl = document.all[focusId];
    }
    var focused = targetControl;
    if (targetControl && (!WebForm_CanFocus(targetControl))) {
        focused = WebForm_FindFirstFocusableChild(targetControl);
    }
    if (focused) {
        try {
            focused.focus();
        }
        catch (e) {
        }
    }
}

但是为了使用这个代码,我必须包含一些.axd资源文件:当你设置时,似乎ASP.NET自动包含它们     someControl.Focus(); 在您的服务器端代码中。但这又插入了     WebForm_AutoFocus( 'myGridViewClientID');

将页面滚动到错误的位置

1 个答案:

答案 0 :(得分:0)

有一个客户端方法scrollIntoView,它滚动页面直到元素可见。您可以发出服务器端命令:

ClientScript.RegisterStartupScript(this.GetType(), "MyScript","document.getElementById('SecondElementID').scrollIntoView();", true);

其中'SecondElementID'是您要滚动到的元素的id。

演示:http://jsfiddle.net/v8455c79/ 此演示展示了如何在一个元素和页面滚动到另一个元素上设置焦点