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?

War es hilfreich?

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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top