Как использовать SetFocus на элемент управления текстового поля? - PullRequest
11 голосов
/ 08 октября 2009

Я пытаюсь установить фокус на текстовом поле.

SetFocus(txtUserName);

Я не вижу никаких изменений на веб-странице.

В чем разница между .Focus() и SetFocus() и какова функциональность каждого из них?

Ответы [ 5 ]

15 голосов
/ 08 октября 2009

Вы можете использовать .Focus() на самом элементе управления или вызвать страницу SetFocus(), передав ссылку на элемент управления. Обратите внимание, что вам нужно передать элемент управления, а не ID, поскольку это, кажется, не поддерживается (по крайней мере, начиная с .NET 3.5). Подробнее см. Страница MSDN. SetFocus .

Что касается разницы между методами? Они в значительной степени взаимозаменяемы, и вам следует вызывать тот, который удобнее, учитывая объекты, к которым у вас есть доступ - обычно проще вызывать .Focus() для элемента управления. См. Как настроить фокус на элементах управления веб-сервера ASP.NET на MSDN.

4 голосов
/ 08 октября 2009

В зависимости от того, как вы хотите, чтобы ваш рабочий процесс, или каковы ваши спецификации, у вас есть 2 варианта:

  1. Установить, если со стороны сервера. Как упоминал Джон, вы можете использовать метод Focus(), доступный элементам управления пользовательского интерфейса. Это применит фокус к элементу управления, когда ваша страница будет отображаться в браузере. Однако в результате взаимодействия пользователя с другими элементами на странице вы потеряете его.

  2. Установите его на стороне клиента, используя JavaScript. Это даст вам больше гибкости, поскольку вы можете применить фокус на основе взаимодействия с пользователем. Чтобы применить фокус на стороне клиента, вы можете использовать DOM (объектную модель документа). Вам нужно получить ссылку на элемент управления, а затем вызвать метод focus():

    document.getElementById (txtUserName) .focus ();

То есть, если идентификатор элемента управления (как он зарегистрирован на стороне клиента) равен txtUserName. В зависимости от макета вашей страницы это будет менее вероятно, и вы можете столкнуться с проблемами, если вы измените макет, так что это на самом деле не лучшая практика.

Хорошей практикой является регистрация переменной JavaScript, целью которой является сохранение идентификатора клиента элемента управления, который будет отображаться в HTML. Вы можете сделать это с помощью ClientScriptManager class:

ClientScript.RegisterClientScriptBlock(this.GetType(), "setFocus", "var focusFieldId = '" + txtUserName.ClientID + "';", true);

и затем на стороне клиента вы можете сказать

document.getElementById(focusFieldId).focus();

Вы можете преобразовать это, например, в метод с именем setUserNameFocus(), а затем вызвать этот метод для любого события на стороне клиента, которое вы хотите. Например, одной из популярных практик является сохранение акцента на определенном поле, когда пользователь нажимает на место на странице. Например, ваш элемент HTML body может выглядеть следующим образом, если вы не хотите терять фокус для своего элемента:

<body onload="setUserNameFocus();" onclick="setUserNameFocus();">
2 голосов
/ 08 октября 2009

В элементах управления есть метод Focus (), который можно вызвать для установки фокуса на этот элемент управления.

txtUserName.Focus();

Кроме того, на странице имеется метод SetFocus (), который принимает либо объект Control, либо идентификатор элемента управления, на который необходимо установить фокус.

this.Page.SetFocus(txtUserName);

или

this.Page.SetFocus(txtUserName.ClientID);
2 голосов
/ 08 октября 2009
 txtUserName.Focus()

Для получения дополнительной информации, проверьте:

0 голосов
/ 15 мая 2016

Существует простой подход к этому.

В Visual Studio поместите следующее в событие Page_Load ...

Page.Form.DefaultFocus = TextBox1.ClientID;

Page.Form.DefaultButton = Button1.UniqueID; 

Пожалуйста, отметьте как "Ответил", если это отвечает на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...