Autopostback mit TextBox den Fokus verliert
-
05-07-2019 - |
Frage
Ein TextBox
gesetzt, um den Wert AutoPostback
wie Ändern sollte eine Anzahl von (nur zur Anzeige) Felder verursacht neu berechnet und angezeigt werden.
Das funktioniert gut.
Wenn jedoch das Feld aus, bewegt sich der Fokus kurz auf das nächste Feld mit Registerkarten wird, verschwindet dann, wenn die Seite neu gezeichnet wird, so gibt es überall nicht scharfgestellt ist.
Ich möchte den Fokus auf das neue Feld sein, nicht die Textbox ich gerade geändert haben. Gibt es eine Möglichkeit, herauszufinden, welches Feld den Fokus hatte und zwingen sie, es wieder zu haben, wenn die Seite neu gezeichnet wird?
Lösung
Das ist "by design". Wenn Sie ASP.NET verwenden 2.0+ können Sie versuchen, die Focus-Methode des TextBox aufrufen, sobald die Postback auftritt (vorzugsweise im Textchanged-Ereignis von dem Text).
Ich bin nicht sicher, ob es eine integrierte Möglichkeit ist Fokus zu verfolgen, aber ich fand diese Artikel Codeproject, die den Trick tun sollte.
Andere Tipps
Sie könnten auch erwägen, Refresh-Display-only Felder mit AJAX Lösung auf basierend WebControl.Controls .TabIndex Analyse, können Sie es verwenden, wenn Sie möchten.
Das ist, was passiert:
1) TAB auf einem Feld - Kundenveranstaltung
2) Fokus auf nächste Feld - Kundenveranstaltung
3) Postback - Server Ereignis
4) Seite neu gezeichnet - Client-Ereignis neue Seite überschreibt preious Client Ereignisse
Die Lösung des Problems ist:
a) erhalten, das Element, das den Fokus VOR Postbacks
gewonnen hat<script>
var idSelected;
$("input").focusin(function () {
idSelected = this.id;
});
</script>
b) Speichern der ClientID (eigentlich in var idSelected
) irgendwo (das heißt eine versteckte Textbox, Vith Viewstate = true) VOR Postbacks
** b) get ClientID ** (Auszug aus versteckten TextBox und steckt es in var idSelected
) nach dem Postback
d) erhalten, das Element mit ClientID und der Fokus nach dem Postback
<script>
$(document).ready(function () {
if (idSelected != null) {
$("#" + idSelected).focus();
idSelected = null;
});
});
</script>
Hinweis: Diese Beispielskripte verwenden JQuery
.
Denken Sie daran, Jquery.js
in Ihrer Lösung zu setzen und ein Verweis auf Ihrer Seite
<form id="form1" runat="server" enctype="multipart/form-data" method="post">
<asp:ScriptManager runat="server" >
<Scripts>
<asp:ScriptReference Path="~/Scripts/jquery.js" ScriptMode="Auto" />
....
Hinweis 2: Diese Lösung funktioniert ohne AJAX
.
Schauen Sie sich diese Antwort: zu machen Javascript Arbeit über Ajax müssen Sie folgenden Code verwenden:
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
function EndRequestHandler(sender, args)
{
MyScript();
}
</script>