如何在文本框控件上使用SetFocus?

时间:2009-10-07 20:05:12

标签: asp.net controls

我正在尝试将焦点设置在文本框上。

SetFocus(txtUserName);

我在网页上看不到任何变化。

.Focus()SetFocus()之间的区别是什么?每个人的功能是什么?

5 个答案:

答案 0 :(得分:15)

您可以在控件本身上使用.Focus(),或者调用Page的SetFocus(),并传入对控件的引用。请注意,您需要传入控件而不是ID,因为似乎不支持(至少从.NET 3.5开始)。有关详情,请参阅MSDN Page.SetFocus

至于方法之间的区别?它们在很大程度上是可以互换的,你可以根据你有权访问的对象调用更方便的东西 - 通常在控件上调用.Focus()更容易。请参阅MSDN上的How to Set Focus on ASP.NET Web Server Controls

答案 1 :(得分:4)

根据您的工作流程或规格,您有两种选择:

  1. 从服务器端设置。就像John提到的那样,你可以使用UI控件可用的Focus()方法。当您的页面将在浏览器中呈现时,这将把焦点应用于控件。但是,由于用户与页面上的其他元素进行交互,您将丢失它。

  2. 使用JavaScript在客户端设置它。这将为您提供更大的灵活性,因为您可以根据用户交互应用焦点。 要将焦点应用于客户端,您可以使用DOM(文档对象模型)。您需要获得对控件的引用,然后可以调用focus()方法:

    的document.getElementById(txtUserName).focus();

  3. 即如果控件的ID(因为它在客户端注册)是txtUserName。根据页面的布局,这种情况不太可能发生,如果更改布局,可能会遇到麻烦,因此这不是最佳实践。

    一个好的做法是注册一个JavaScript变量,其目的是保存控件的客户端ID,因为它将在HTML中呈现。 您可以使用ClientScriptManager类:

    来完成此操作
    ClientScript.RegisterClientScriptBlock(this.GetType(), "setFocus", "var focusFieldId = '" + txtUserName.ClientID + "';", true);
    

    然后在客户端你可以说

    document.getElementById(focusFieldId).focus();
    

    您可以将此重构为一个名为setUserNameFocus()的方法,然后在您想要的任何客户端事件上调用该方法。一种流行的做法是例如当用户点击页面上的位置时将焦点保持在某个字段上。例如,如果您不想丢失元素的焦点,那么HTML body元素可能如下所示:

    <body onload="setUserNameFocus();" onclick="setUserNameFocus();">
    

答案 2 :(得分:2)

答案 3 :(得分:2)

控件有一个Focus()方法,您可以调用该方法将焦点设置为该控件。

txtUserName.Focus();

此外,Page还有一个SetFocus()方法,它接受一个Control对象或你想要设置焦点的Control的ID。

this.Page.SetFocus(txtUserName);

this.Page.SetFocus(txtUserName.ClientID);

答案 4 :(得分:0)

有一个简单的方法。

在Visual Studio中,将以下内容放在Page_Load事件...

Page.Form.DefaultFocus = TextBox1.ClientID;

Page.Form.DefaultButton = Button1.UniqueID; 

请标记为&#34;已回答&#34;,如果这可以回答您的问题。