У меня есть страница настройки следующим образом:Как можно контролировать фокус в асинхронных обратных передачах?
<ajax:UpdatePanel id="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:TextBox id="TextBox1" runat="server" AutoPostBack="true"/>
<asp:TextBox id="TextBox2" runat="server" AutoPostBack="true"/>
</ContentTemplate>
</ajax:UpdatePanel>
<asp:TextBox id="TextBox3" runat="server"/>
Всякий раз, когда происходит изменение в пределах TextBox1 или TextBox2 асинхронной постбэк происходит. Это, конечно же, инициируется путем перемещения фокуса на другой элемент управления после изменения текста. Проблема заключается в том, когда асинхронный postback завершает контроль, который получил фокус, теряет фокус. Неважно, находится ли она внутри панели обновления или отсутствует.
Я пытался добавить JavaScript в Masterpage:
<script type="text/javascript">
var lastFocused = null;
$(document).ready(function() {
$('input').focus(function() {
lastFocused = this;
});
$('.dropdown').focus(function() {
lastFocused = this;
});
});
function RestoreFocus(source, args) {
if (lastFocused != null)
lastFocused.focus();
}
function AddRequestHandler() {
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(RestoreFocus);
}
</script>
Наряду с
<body onload="AddRequestHandler">
Я знаю lastFocused получает значение и RestoreFocus работает, но всякий раз, когда он запускает значение lastFocused нулевой.
У кого-нибудь есть исправление для моего javascript или решения проблемы в целом?
Это похоже на работу, хотя мне также пришлось изменить RestoreFocus для поиска элемента управления на основе id. Я подозреваю, из-за того, что элементы управления на панели обновлений стали совершенно новыми? –