我有一个正在开发的ASP.NET WebForms应用程序,其中在选择以前的控件或级联控件时添加了控件。我将重点从“后台代码”转移到需要的有效控制上。我也在使用Page.SetFocus(control.ClientID);强制滚动。我遇到了一个问题,即页面并非总是滚动到页面底部,而使所需控件的一半看不见。我实现了以下解决滚动问题的Javascript,但是,控件不再获得焦点了吗?我尝试了一些在这里找到的解决方案,但是似乎没有一个滚动到锚点,而是将焦点放在我想要的控件上。任何事情。任何帮助,将不胜感激!这是代码。
< script >
$(this).on("load", function() {
window.location.href = "#invAnchor";
var h = document.getElementById("lblControl").innerHTML;
var g = h.id;
var w = document.getElementById(g);
w.focus();
}); <
/script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label id="lblControl" runat="server">SomeControlsIDSetInCodeBehind </label>
<a name="invAnchor" id="invAnchor ></a>
我还尝试过使用ClientScript.RenderClientScriptBlock进行代码隐藏。.
public static void FocusControlOnPageLoad(string ClientID,
System.Web.UI.Page page)
{
//page.RegisterClientScriptBlock
page.ClientScript.RegisterClientScriptBlock(page.GetType(),"CtrlFocus",
@"<script>
function ScrollView()
{
var el = document.getElementById('" + ClientID + @"')
if (el != null)
{
//this works by itself
window.location.href = '"+ ClientID + @"';
//so does this
el.scrollIntoView();
el.focus();
}
}
</script>");
//added this as a Double PLEASE SET FOCUS... sadly it failed.
page.SetFocus(ClientID);
}
}
我在另一篇文章中发现了。
无论如何,都可以设置Focus或Window.Location自行工作。但是我都需要他们两个一起工作。再有什么想法吗?也许我不能两者兼得?谢谢!