2010-10-27 12 views
0

J'ai un usercontrol qui est utilisé pour la recherche. Il y a une zone de texte et un bouton de recherche. Lorsque vous cliquez sur le bouton, la méthode de recherche est appelée. Je souhaite que la recherche se produise également lorsque le curseur se trouve dans la zone de texte et que la touche Entrée est enfoncée.Comment définir un événement pour que "Enter" soit pressé alors que le curseur est dans une zone de texte dans usercontrol

Ma première réflexion sur la façon de faire était peut-être d'ajouter l'événement pour soumettre l'action de la balise de formulaire. Cependant, cette commande usercontrol n'a pas d'étiquette de formulaire.

Quelqu'un a-t-il des suggestions?

Merci!

Répondre

0

Par défaut, si un utilisateur clique sur Entrée alors qu'il se trouve dans une zone de texte, le formulaire est publié, déclenchant une publication. Par conséquent:

Procédez comme suit dans l'événement ontextchanged. est ici sur l'exemple de code plus facile jamais écrit:

<asp:TextBox ID="TextBox1" runat="server" ontextchanged="TextBox1_TextChanged"></asp:TextBox> 
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" /> 
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 

et code-behind:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    SomeFunctionForHandlingEvents(); 
} 
protected void TextBox1_TextChanged(object sender, EventArgs e) 
{ 
    SomeFunctionForHandlingEvents(); 
} 
private void SomeFunctionForHandlingEvents() 
{ 
    Label1.Text = "event called"; 
} 
+0

Est-ce que Text_Changed n'est pas appelé pendant une publication, ce qui nécessiterait que certaines actions de soumission soient prises côté client? – KeithS

+0

Désolé, je n'ai pas vu une exigence pour aucune publication. Cependant, en cliquant sur "Entrée" dans une zone de texte, le formulaire sera envoyé, déclenchant une publication. Si vous voulez l'illision d'aucune publication, vous devez inclure Ajax dans votre solution. – David

+0

Bien sûr, cela ne fonctionnera pas si le TextBox est réglé sur Multiline – David

1

je le ferais avec JavaScript: attacher un gestionnaire OnKeyPress qui recherche le code clé 13, et les appels form.submit:

function enterPressed(evn) { 
if (window.event && window.event.keyCode == 13) { 
    document.forms[0].submit; 
} else if (evn && evn.keyCode == 13) { 
    document.forms[0].submit; 
} 
} 
document.onkeypress = enterPressed; 
+0

Cela serait parfait pour une zone de texte Multiline, donc +1, mais ce n'est pas nécessaire pour une ASP normale: Textbox ou même une entrée html. Le fait de cliquer sur Entrée dans une zone de texte déclenchera une publication, à moins qu'il n'ait spécifiquement outrepassé ce comportement. – David

0

Courez-vous sur une page Web ou localement? Frapper Enter dans une zone de texte vous déplace généralement vers le champ suivant localement afin que vous puissiez utiliser l'événement OnLeave (je pense que c'est son nom). Sur une page Web Entrer habituellement soumettre le formulaire qui est exactement ce que vous voulez. Récupérez la nouvelle valeur de l'événement TextChanged.

+1

Non ... Hitting Enter soumet généralement le formulaire. Frapper TAB se déplace généralement vers le champ suivant. – David