Я нашел ответы от Гленна Слэйвена и Криса / Алекса, чтобы приблизить меня к решению моей конкретной проблемы с настройкой фокуса на элемент управления TextBox ASP.NET, к которому был присоединен AutoCompleteExtender. Document.getElementById (focusControlID) .focus () продолжал выдавать ошибку javascript, из-за которой document.getElementById возвращал нулевой объект. Переменная focusControlID возвращала правильное значение ClientID времени выполнения для элемента управления TextBox. Но по какой-то причине функции document.getElementById это не понравилось.
Мое решение состояло в том, чтобы добавить jQuery в микс, поскольку я уже использовал его для рисования фона любого элемента управления, на котором был фокус, плюс принудительное нажатие клавиши Enter для перехода по форме вместо запуска обратной передачи.
Моя функция setFocus в итоге выглядела так:
function setFocus(focusControlID) {
$('#' + focusControlID).blur();
$('#' + focusControlID).focus();
}
Это избавило от ошибки времени выполнения javascript, поместило фокус на нужный элемент управления TextBox и поместило курсор в элемент управления. Без размытия, а затем фокусировки элемент управления будет выделен, как если бы он имел фокус, но курсор еще не будет находиться в элементе управления. Пользователю все равно придется щелкнуть внутри элемента управления, чтобы начать редактирование, что будет раздражать UX.
Мне также пришлось увеличить тайм-аут со 100 до 300. Ваш пробег может варьироваться ...
Я согласен со всеми, что это взлом. Но с точки зрения конечного пользователя они не видят этот код. Хак для них, если они вынуждены вручную щелкнуть внутри элемента управления вместо того, чтобы просто автоматически поместить его в элемент управления и набрать первые несколько букв, чтобы активировать функцию автоматического поиска. Итак, снимаю шляпу перед всеми, кто предоставил свои хаки.
Надеюсь, это поможет кому-то еще.