Bouton de validation de formulaire Seam / JSF
Question
J'ai un formulaire de recherche avec un constructeur de requêtes. Le constructeur est activé par un bouton. Quelque chose comme ça
<h:form id="search_form">
<h:outputLabel for="expression" value="Expression"/>
<h:inputText id="expression" required="true" value="#{searcher.expression}"/>
<button onclick="openBuilder(); return false;">Open Builder</button>
<h:commandButton value="Search" action="#{searcher.search}"/>
</h:form>
Le résultat est HTML qui comporte à la fois un <button/>
et un <input type="submit"/>
dans le formulaire. Si l'utilisateur entre une chaîne dans le champ d'expression et appuie sur la touche Entrée au lieu de cliquer sur le bouton d'envoi, le générateur de requêtes s'affiche lorsque le comportement attendu est que la recherche soit soumise. Qu'est-ce qui donne?
La solution
Un bouton dans un formulaire HTML est supposé être utilisé pour soumettre le formulaire. Changer le bouton pour saisir le type = & Bouton & Quot; et cela devrait résoudre le problème.
Vous pouvez également ajouter un bouton type = " " à l'élément button.
Autres conseils
en premier lieu, attribuez un identifiant au bouton de recherche. Ensuite, dans la zone de texte, vous pouvez intercepter l'événement client onkeydown , avec une fonction (javascript) semblable à celle-ci:
function KeyDownHandler(event)
{
// process only the Enter key
if (event.keyCode == 13)
{
// cancel the default submit
event.returnValue=false;
event.cancel = true;
// submit the form by programmatically clicking the specified button
document.getElementById('searchButtonId').click();
}
}
J'espère que je vous aide.
s'il existe un seul champ de saisie dans le formulaire, de nombreux navigateurs le soumettent automatiquement lorsque la touche Entrée est enfoncée.
Essayez
- Ajouter un autre champ de saisie. Cachez-le en le coiffant pour qu'il ne soit pas visible. (par exemple,
<input type="text" name="bogusField" style="display: none;" />
- Bloquez le comportement de soumission du formulaire d'entrée de clé dans un gestionnaire d'événements JavaScript (par exemple, ici ou ici ). Mieux encore, utilisez une boîte à outils d'interface graphique pouvant vous aider (GWT, par exemple)