2010-10-04 8 views
2

Hey, Avant de commencer à écrire mon problème, je vais excuser mon mauvais anglais et j'espère que vous pouvez me comprendre.Réglez toujours Focus sur Textbox (ASP.NET, Updatepanel)

J'ai dans une application Web ASP.NET un panneau de mise à jour AJAX. Dans ce panneau de mise à jour est une zone de texte pour les résultats de recherche dynamiques. Lorsque je commence à écrire dans la zone de texte, les résultats sont similaires à ceux suggérés par Google. Maintenant, le focus doit toujours être sur la zone de texte (champ d'entrée), maintenant le point où l'utilisateur clique.

Actuellement, le panneau de mise à jour ASP.NET est actualisé après quelques secondes lorsque l'utilisateur commence à taper.

Merci pour l'aide :-)

+0

Je ne suis pas tout à fait sûr de cette réponse, mais ce qui se passe quand vous mettez l'accent sur le contrôle dans l'événement Page_load? – Emerion

+0

Le focus doit toujours être dans la zone de texte, où que l'utilisateur clique .. – Patrik

Répondre

0

A F.E. SetFocus simple, en Page.Load devrait fonctionner:

ScriptManager1.SetFocus (TextBox1.ClientID)

MISE À JOUR: selon this post travaux suivants ...

Ajouter ce script dans un bloc de script la tête de votre page:

function SetEnd(TB){ 
    if (TB.createTextRange){ 
     var FieldRange = TB.createTextRange(); 
     FieldRange.moveStart('character', TB.value.length); 
     FieldRange.collapse(); 
     FieldRange.select(); 
    } 
} 

Puis ajouter l'événement onfocus à votre zone de texte:

onfocus="SetEnd(this)" 

Dans votre Page.Load de codebehind ou gestionnaire TextChanged-Event ajouter l'appel standard SetFocus:

ScriptManager sm = ScriptManager.GetCurrent(this); 
sm.SetFocus(myTextBox) 
+0

Hey Tim, problème ist maintenant, quand je modifier la texte le curseur va sauter à la fin. L'utilisateur doit pouvoir éditer le texte. Exemple: J'ai entré stackowwwerflow et je vais le corriger en stackoverflow. Dans votre échantillon, le curseur saute toujours à la fin du texte. – Patrik

+0

Tim, qu'est-ce qui a changé cet effet? ScriptManager sm = ScriptManager.GetCurrent (this); sm.SetFocus (myTextBox) – Patrik

+0

@Patrik: mon changement n'a rien à voir avec vos problèmes pour maintenir la position du curseur lors de l'édition. Désolé, actuellement je n'ai pas le temps de creuser plus profondément dans ce problème. –

3

il y a un événement lorsque dom html fini UpdatePanel mis à jour

Sys.WebForms.PageRequestManager.getInstance().add_endRequest 

essayer cette

function EndRequestHandler() { 
//get focus on the textbox 
myTextbox.focus(); } 

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 
+0

Cela a fonctionné pour moi. J'ai fini par encapsuler ce code dans la fonction 'pageLoad' de mon bloc de script. –

1

qui est assez amusant, mais ici est une solution possible . L'idée est: si l'utilisateur sort de la zone de texte (onblur), puis le ramener à la zone de texte (fonction focusOnTxt):

<head runat="server"> 
    <title></title> 
    <script type="text/javascript"> 
     function focusOnTxt(sender) { 
      sender.focus(); 
      sender.value = sender.value; 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
    <asp:UpdatePanel ID="upnl" runat="server"> 
     <ContentTemplate> 
      <asp:TextBox ID="txt" runat="server" 
      onblur="focusOnTxt(this)"></asp:TextBox> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    </form> 
</body> 
</html> 

Et Page_Load:

public partial class _Default : Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     txt.Focus(); 
    } 
} 
+0

Salut, merci pour l'aide, le problème est que tout le texte est sélectionné. – Patrik

+0

Utilisez-vous sender.value = sender.value ;? Cela devrait empêcher la sélection de texte entier. Et j'ai testé que ma solution a un problème avec le chrome. –

+0

Oui. Problème avec le chrome n'est pas un pour moi. Je dois seulement supporter IE7 et IE8. Voici un raccourci de ma zone de texte.J'espère que cela aide: Patrik

Questions connexes